Selenium 如何在Behat/Mink测试失败时保持浏览器打开

Selenium 如何在Behat/Mink测试失败时保持浏览器打开,selenium,browser,behat,mink,Selenium,Browser,Behat,Mink,我正在使用selenium2驱动程序在docker容器中使用Behat/Mink测试我的Drupal站点 使用容器,我可以看到我的behat测试失败,但问题是一旦失败,浏览器就会关闭,这使我更难看到问题所在 我正在这样运行我的测试: behat --tags '@mystuff' --config=behat-myconfig.yml --strict --stop-on-failure 即使测试失败,是否有办法让远程控制浏览器保持打开状态?默认情况下,这是不可能的 也许你可以找到一些黑客来做

我正在使用selenium2驱动程序在docker容器中使用Behat/Mink测试我的Drupal站点

使用容器,我可以看到我的behat测试失败,但问题是一旦失败,浏览器就会关闭,这使我更难看到问题所在

我正在这样运行我的测试:

behat --tags '@mystuff' --config=behat-myconfig.yml --strict --stop-on-failure

即使测试失败,是否有办法让远程控制浏览器保持打开状态?

默认情况下,这是不可能的

也许你可以找到一些黑客来做这件事,但不推荐这样做,因为每个场景都应该被隔离,至少在运行带有多个测试的套件时,这不是一个好的解决方案

仅此一次,请查看是否可以使用printscreen的逻辑,并改用断点


无论如何,您应该使用verbose-vvv for Behat 3 output+ide调试器来调试代码。

最后我找到了一个很好的解决方案:

将故障辅助添加到FeatureContext,然后使用-wait on failure选项运行behat:

可以使用-wait on failure={seconds}选项 调查/检查浏览器中的故障


您可以使用Behat hook AfterStep在发生错误时拍摄屏幕截图。 考虑一下黑豹驱动程序或DCL驱动程序。 下面是一个简短的示例,其中还考虑了速度更快的非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;
}

谢谢,但这并不会使浏览器按照问题中的要求保持打开状态。我以前遇到过屏幕截图问题,当页面需要滚动而屏幕截图没有滚动时。同样值得注意的是:除了自己编写代码之外,你还可以这样做,我明白了,主要的问题是当一个错误发生时,你无法看到整个结果页面。如果需要查看更多信息,可以使用selenium设置高度页面或滚动到某个对象。滚动示例:使用selenium,您可以将浏览器滚动到所需的css选择器,希望这有帮助:$this->getSession->getPage->find'named',['content',$content]->focus。扩展高度的示例:$this->getSession->resizeWindow1440,您的_高度;