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

时间:2017-10-13 14:53:49

标签: selenium browser behat mink

我正在使用public Observable<Post> transform(final PostResponse postResponse) { return Observable.create(emitter -> { final Post post = new Post(postResponse.getId()); post.setTitle(postResponse.getTitle()); post.setBody(postResponse.getBody()); userRepository.user(postResponse.getUserId()).doOnNext(user -> { post.setUser(user); emitter.onNext(post); }).subscribe(); }); } 驱动程序在Docker容器中使用Behat / Mink测试我的Drupal站点。

使用Selenium Standalone-Chrome容器,我可以看到我的behat测试失败,但问题是,一旦它们失败,浏览器就会关闭,这使我很难看到问题所在。< / p>

我正在运行我的测试:

doOnNext

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

3 个答案:

答案 0 :(得分:1)

默认情况下不可能。

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

只有一次看看您是否可以使用printscreen的逻辑并改为使用breakpoint

无论如何,你应该使用详细的(Behat 3的-vvv)输出+ ide调试器来调试你的代码。

答案 1 :(得分:0)

最后,我找到了一个很好的解决方案:behat-fail-aid

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

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

答案 2 :(得分:0)

只要使用Behat钩子“ AfterStep”发生错误,就可以截取屏幕截图。 考虑看看Panther驱动程序或DChrome驱动程序。 这里是一个简短的示例,其中还考虑了非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;
}