【问题标题】:How to leave the browser open when a Behat/Mink test failsBehat/Mink 测试失败时如何让浏览器保持打开状态
【发布时间】:2017-10-13 14:53:49
【问题描述】:

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

使用Selenium Standalone-Chrome 容器,我可以看到我的行为测试失败,但问题是一旦失败,浏览器就会关闭,这让我更难看出问题所在。

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

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

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

【问题讨论】:

    标签: selenium browser behat mink


    【解决方案1】:

    默认情况下是不可能的。

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

    只看一次你是否可以使用printscreen 的逻辑,然后改用breakpoint

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

    【讨论】:

      【解决方案2】:

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

      将失败帮助添加到您的 FeatureContext,然后使用 --wait-on-failure 选项运行 behat:

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

      【讨论】:

        【解决方案3】:

        每当发生错误时,您都可以使用 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;
        }
        

        【讨论】:

        • 谢谢,但这不会让浏览器按照问题中的要求打开。当页面需要滚动并且屏幕截图未滚动时,我之前遇到过屏幕截图问题。另外值得注意的是:behat-fail-aid 也可以这样做,而不是自己编码,behat-screenshot 也可以。
        • 嗯,我明白了,主要问题是发生错误时您无法看到整个结果页面。如果您需要查看更多信息,可以使用 selenium 设置页面高度或滚动到某个对象。滚动示例:使用 selenium,您可以将浏览器滚动到所需的 css 选择器,希望这会有所帮助: $this->getSession()->getPage()->find('named', ['content', $content]) ->焦点(); .扩展高度示例:$this->getSession()->resizeWindow(1440, YOUR_HEIGHT);
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多