Behat/Mink 测试失败时如何让浏览器保持打开状态
How to leave the browser open when a Behat/Mink test fails
我正在使用 selenium2
驱动程序在 docker 容器中使用 Behat/Mink 测试我的 Drupal 站点。
使用 Selenium Standalone-Chrome 容器,我可以看到我的 behat 测试失败了,但问题是一旦失败,浏览器就会关闭,这让我更难看出问题所在.
我 运行 我的测试是这样的:
behat --tags '@mystuff' --config=behat-myconfig.yml --strict --stop-on-failure
有没有办法在测试失败时让远程控制的浏览器保持打开状态?
默认情况下是不可能的。
也许您可以找到一些 hack 来做到这一点,但不推荐这样做,因为每个场景都应该被隔离,这不是一个好的解决方案,至少当 运行 一些套件有多个测试时。
一次只看看您是否可以使用 printscreen
的逻辑并改用 breakpoint
。
无论如何,您应该使用详细(-vvv
对于 Behat 3)输出 + ide 调试器来调试您的代码。
最后我找到了一个很好的解决方案:behat-fail-aid。
将失败辅助添加到您的 FeatureContext,然后 运行 使用 --wait-on-failure
选项:
the --wait-on-failure={seconds} option can be used to
investigate/inspect failures in the browser.
您可以在使用 Behat 钩子“AfterStep”出现错误时截图。
考虑看看 Panther Driver 或 DChrome Driver。
这是一个缩短的示例,还考虑了非 javascript 测试(速度更快):
use Behat\Mink\Driver\Selenium2Driver;
/** Context Class Definition ... */
/**
* @AfterStep
*/
public function takeScreenShotAfterFailedStep(AfterStepScope $scope)
{
if (99 !== $scope->getTestResult()->getResultCode()) {
return;
}
$this->takeAScreenShot('error');
}
private function takeAScreenShot($prefix = 'screenshot')
{
$baseName= sprintf('PATH_FOR_YOUR_SCREENSHOTS/%s-%s', $prefix, (new \DateTime())->format('Y_m_d_H_i_s'));
if ($this->supportsJavascript()) {
$extension = '.png';
$content = $this->session->getScreenshot();
} else {
$extension = '.html';
$content = $this->getSession()->getPage()->getOuterHtml();
}
file_put_contents(sprintf('%s%s', $baseName, $extension), $content);
}
private function supportsJavascript()
{
return $this->getSession()->getDriver() instanceof Selenium2Driver;
}
我正在使用 selenium2
驱动程序在 docker 容器中使用 Behat/Mink 测试我的 Drupal 站点。
使用 Selenium Standalone-Chrome 容器,我可以看到我的 behat 测试失败了,但问题是一旦失败,浏览器就会关闭,这让我更难看出问题所在.
我 运行 我的测试是这样的:
behat --tags '@mystuff' --config=behat-myconfig.yml --strict --stop-on-failure
有没有办法在测试失败时让远程控制的浏览器保持打开状态?
默认情况下是不可能的。
也许您可以找到一些 hack 来做到这一点,但不推荐这样做,因为每个场景都应该被隔离,这不是一个好的解决方案,至少当 运行 一些套件有多个测试时。
一次只看看您是否可以使用 printscreen
的逻辑并改用 breakpoint
。
无论如何,您应该使用详细(-vvv
对于 Behat 3)输出 + ide 调试器来调试您的代码。
最后我找到了一个很好的解决方案:behat-fail-aid。
将失败辅助添加到您的 FeatureContext,然后 运行 使用 --wait-on-failure
选项:
the --wait-on-failure={seconds} option can be used to investigate/inspect failures in the browser.
您可以在使用 Behat 钩子“AfterStep”出现错误时截图。 考虑看看 Panther Driver 或 DChrome Driver。 这是一个缩短的示例,还考虑了非 javascript 测试(速度更快):
use Behat\Mink\Driver\Selenium2Driver;
/** Context Class Definition ... */
/**
* @AfterStep
*/
public function takeScreenShotAfterFailedStep(AfterStepScope $scope)
{
if (99 !== $scope->getTestResult()->getResultCode()) {
return;
}
$this->takeAScreenShot('error');
}
private function takeAScreenShot($prefix = 'screenshot')
{
$baseName= sprintf('PATH_FOR_YOUR_SCREENSHOTS/%s-%s', $prefix, (new \DateTime())->format('Y_m_d_H_i_s'));
if ($this->supportsJavascript()) {
$extension = '.png';
$content = $this->session->getScreenshot();
} else {
$extension = '.html';
$content = $this->getSession()->getPage()->getOuterHtml();
}
file_put_contents(sprintf('%s%s', $baseName, $extension), $content);
}
private function supportsJavascript()
{
return $this->getSession()->getDriver() instanceof Selenium2Driver;
}