【发布时间】:2014-08-25 14:53:51
【问题描述】:
我知道可以通过扩展 PHPUnit_Extensions_Selenium2TestCase 来截取屏幕截图,但现在我使用的是 Facebook 的 php-webdriver,所以我只是扩展 PHPUnit_Framework_TestCase
有没有办法只用这个驱动和不扩展扩展来截屏?
谢谢。
【问题讨论】:
我知道可以通过扩展 PHPUnit_Extensions_Selenium2TestCase 来截取屏幕截图,但现在我使用的是 Facebook 的 php-webdriver,所以我只是扩展 PHPUnit_Framework_TestCase
有没有办法只用这个驱动和不扩展扩展来截屏?
谢谢。
【问题讨论】:
$driver->takeScreenshot('/path/to/image.png');
【讨论】:
$image = $driver->takeScreenshot();。
我找到了这样的解决方案,可以在失败时截图:
/**
* {@inheritdoc}
*/
public function tearDown()
{
$status = $this->getStatus();
if ($status == \PHPUnit_Runner_BaseTestRunner::STATUS_ERROR
|| $status == \PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) {
$now = new \DateTime('now');
$screenshotFileName = $this->getParameter('screenshots_directory_full_path');
$screenshotFileName = $screenshotFileName . $now->format('Y-m-d H:i:s') . ' test ' . $this->getName() . '.png';
$this->webDriver->takeScreenshot($screenshotFileName);
}
$this->webDriver->quit();
}
您很久以前就问过这个问题,但希望对其他人有所帮助:)
【讨论】:
以@a_sarana 所说的话为基础。在至少 >= 5 的版本中,您可以使用 phpunit 方法:
$this->hasFailed();
例子
if($this->hasFailed())
{
$selenium->takeScreenshot($filename);
}
这假设您不关心发生的故障类型。
附注如果您最终得到空白屏幕截图,您可能需要等待页面加载。我损失了大约半天的调试工作。
例子
sleep(1); // one second
或
// wait max of 2 sec check every 1/10 sec until element is viable
$driver->wait(2, 1000)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(WebDriverBy::id("elementID"))
);
【讨论】: