PHPUnit可以选择在Selenium测试用例失败时截取屏幕截图。但是,生成的屏幕截图文件名是一些东西 - 我不知道到底是什么。虽然测试结果报告允许我将特定的失败测试用例与屏幕截图文件名匹配,但这很麻烦。
如果我可以重命名屏幕截图以使用来自失败的断言的消息以及时间戳,例如,它使截图更容易交叉引用。有没有办法重命名生成的屏幕截图文件名?
答案 0 :(得分:3)
你可以尝试这样的东西(它适用于selenium2):
protected function tearDown() {
$status = $this->getStatus();
if ($status == \PHPUnit_Runner_BaseTestRunner::STATUS_ERROR || $status == \PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) {
$file_name = sys_get_temp_dir() . '/' . get_class($this) . ':' . $this->getName() . '_' . date('Y-m-d_H:i:s') . '.png';
file_put_contents($file_name, $this->currentScreenshot());
}
}
同时取消选中
protected $captureScreenshotOnFailure = FALSE;
答案 1 :(得分:1)
我最终使用了修改后的@sectus'答案:
public function onNotSuccessfulTest(Exception $e) {
$file_name = '/' . date('Y-m-d_H-i-s') . ' ' . $this->getName() . '.png';
file_put_contents($this->screenshotPath . $file_name, base64_decode($this->captureEntirePageScreenshotToString()));
parent::onNotSuccessfulTest($e);
}
虽然tearDown()
中的条件检查工作正常,但基于Extending phpunit error message,我决定选择onNotSuccessfulTest()
,因为它似乎更清晰。
文件名无法接受冒号:
,或者我会收到来自file_get_contents
的错误消息:failed to open stream: Protocol error
函数currentScreenshot
也不存在,所以我最终根据http://www.devinzuczek.com/2011/08/taking-a-screenshot-with-phpunit-and-selenium-rc/以不同的方式截取屏幕截图。
答案 2 :(得分:0)
我玩的另一种方法,因为我仍然希望使用$this->screenshotUrl
和$this->screenshotPath
来方便配置:
takeScreenshot
protected function takeScreenshot() {
if (!empty($this->screenshotPath) &&
!empty($this->screenshotUrl)) {
$file_name = '/' . date('Y-m-d_H-i-s') . ' ' . $this->getName() . '.png';
file_put_contents($this->screenshotPath . $file_name, base64_decode($this->captureEntirePageScreenshotToString()));
return 'Screenshot: ' . $this->screenshotUrl . '/' . $file_name . ".png\n";
} else {
return '';
}
}