Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save michaelesmith/7255024 to your computer and use it in GitHub Desktop.
Save michaelesmith/7255024 to your computer and use it in GitHub Desktop.
<?php
class FeatureContext extends MinkContext {
/**
* Take screenshot when step fails. Works only with Selenium2Driver.
* Screenshot is saved at [Date]/[Feature]/[Scenario]/[Step].jpg
*
* @AfterStep
*/
public function takeScreenshotAfterFailedStep(StepEvent $event) {
if ($event->getResult() === StepEvent::FAILED) {
$driver = $this->getSession()->getDriver();
$step = $event->getStep();
$path = array(
// 'date' => date("Ymd-Hi"),
'feature' => $step->getParent()->getFeature()->getTitle(),
'scenario' => $step->getParent()->getTitle(),
'step' => $step->getType() . ' ' . $step->getText()
);
$path = preg_replace('/[^\-\.\w]/', '_', $path);
$imgBase = $this->kernel->getContainer()->getParameter('behat_screenshot_dir') ?: '/tmp/behat';
$htmlBase = $this->kernel->getContainer()->getParameter('behat_response_dir') ?: '/tmp/behat';
$filename = implode(':', $path);
printf('Saving response: "%s"', $filename);
// Create directories if needed
if (!@is_dir($htmlBase)) {
@mkdir($htmlBase, 0775, TRUE);
}
if (!@is_dir($imgBase)) {
@mkdir($imgBase, 0775, TRUE);
}
file_put_contents($htmlBase . '/' . $filename. '.html', $this->getSession()->getPage()->getContent());
if ($driver instanceof Selenium2Driver) {
try{
file_put_contents($imgBase . '/' . $filename. '.png', $driver->getScreenshot());
}catch (\Exception $e) {
pritnf('Unable to save image');
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment