diff --git a/core/modules/simpletest/tests/src/FunctionalJavascript/BrowserWithJavascriptTest.php b/core/modules/simpletest/tests/src/FunctionalJavascript/BrowserWithJavascriptTest.php
index 572a842f5b9474f843e7f5e14a1508f684ab0311..24397990e041e81ce137ed2664bede06732f9db1 100644
--- a/core/modules/simpletest/tests/src/FunctionalJavascript/BrowserWithJavascriptTest.php
+++ b/core/modules/simpletest/tests/src/FunctionalJavascript/BrowserWithJavascriptTest.php
@@ -53,4 +53,13 @@ public function testAssertJsCondition() {
     $this->assertJsCondition($javascript, 100);
   }
 
+  /**
+   * Tests creating screenshots.
+   */
+  public function testCreateScreenshot() {
+    $this->drupalGet('<front>');
+    $this->createScreenshot('public://screenshot.jpg');
+    $this->assertFileExists('public://screenshot.jpg');
+  }
+
 }
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/JavascriptTestBase.php b/core/tests/Drupal/FunctionalJavascriptTests/JavascriptTestBase.php
index 116bd3256384863c028ce529dbfe51ba10ce3da6..8c3798a04ff89324f907ea3ee448ad9b7b0c16cc 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/JavascriptTestBase.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/JavascriptTestBase.php
@@ -3,6 +3,7 @@
 namespace Drupal\FunctionalJavascriptTests;
 
 use Drupal\Tests\BrowserTestBase;
+use Zend\Escaper\Escaper;
 use Zumba\Mink\Driver\PhantomJSDriver;
 
 /**
@@ -102,6 +103,33 @@ protected function assertJsCondition($condition, $timeout = 1000, $message = '')
     $this->assertTrue($result, $message);
   }
 
+  /**
+   * Creates a screenshot.
+   *
+   * @param string $filename
+   *   The file name of the resulting screenshot. If using the default phantomjs
+   *   driver then this should be a JPG filename.
+   * @param string $background_color
+   *   (optional) Background color name. To use the default background color set
+   *   to NULL, however this can result in completely black screenshots if the
+   *   theme does not have a background color. This string is escaped by
+   *   \Zend\Escaper\Escaper::escapeJs().
+   *
+   * @throws \Behat\Mink\Exception\UnsupportedDriverActionException
+   *   When operation not supported by the driver.
+   * @throws \Behat\Mink\Exception\DriverException
+   *   When the operation cannot be done.
+   */
+  protected function createScreenshot($filename, $background_color = 'white') {
+    $session = $this->getSession();
+    if (!empty($background_color)) {
+      $escaper = new Escaper();
+      $session->executeScript("document.body.style.backgroundColor = '" . $escaper->escapeJs($background_color) . "';");
+    }
+    $image = $session->getScreenshot();
+    file_put_contents($filename, $image);
+  }
+
   /**
    * {@inheritdoc}
    */