Issue #2702661 by alexpott, nevergone, GoZ, jibran, dawehner, hgoto, xjm: Make it simple to take screenshots whilst using JavascriptTestBase

8.2.x
xjm 2016-07-20 10:48:14 -05:00
parent 00d0fa7297
commit e42f6c5826
2 changed files with 37 additions and 0 deletions

View File

@ -53,4 +53,13 @@ JS;
$this->assertJsCondition($javascript, 100);
}
/**
* Tests creating screenshots.
*/
public function testCreateScreenshot() {
$this->drupalGet('<front>');
$this->createScreenshot('public://screenshot.jpg');
$this->assertFileExists('public://screenshot.jpg');
}
}

View File

@ -3,6 +3,7 @@
namespace Drupal\FunctionalJavascriptTests;
use Drupal\Tests\BrowserTestBase;
use Zend\Escaper\Escaper;
use Zumba\Mink\Driver\PhantomJSDriver;
/**
@ -102,6 +103,33 @@ abstract class JavascriptTestBase extends BrowserTestBase {
$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}
*/