如何阻止 codeception/selenium 在断言失败时关闭浏览器窗口?

Posted

技术标签:

【中文标题】如何阻止 codeception/selenium 在断言失败时关闭浏览器窗口?【英文标题】:How can i stop codeception/selenium from closing the browser window on failed assertions? 【发布时间】:2016-03-04 16:36:04 【问题描述】:

我正在使用 selenium 运行 codeception 2。我可以看到 selenium 打开浏览器并运行测试。然后我从代码接收中得到一个错误,即有一个失败的断言。

我知道有一个html文件被保存了,但是有很多JS,所以我无法真正分析。我需要 firefox 窗口保持打开状态,这样我才能看到输出并找出问题所在。

我该怎么做?我已经在使用 -browserSessionReuse 运行 selenium

如果它有所作为,它发生在 $I->haveFriend(); $friend->does() 语句。

【问题讨论】:

尝试将restart: false 添加到 .yml 文件中。 【参考方案1】:

没有直接的解决方案如何做到这一点,但可以使用一些技巧:

    使用交互式控制台,按照与场景中相同的步骤,使用失败的断言 - selenium 保持打开状态,因此您可以调试和评估发生的情况。 在等待中使用技巧。在 cest 文件中添加“__fail”方法,其中放置“wait(300)”(5 分钟)。在测试启动时,您的浏览器将保持打开状态 5 分钟

【讨论】:

【参考方案2】:

如果您正在运行 Cest 样式测试,请尝试

public function _failed(AcceptanceTester $I)

     $I->pauseExecution();

这将使浏览器窗口保持打开状态,直到您按 Enter 键以防出现故障。

或者,您可以在测试失败时截取屏幕截图。

public function _failed(AcceptanceTester $I)
    
        $I->makeScreenshot('test_failed_screenshot' . time());
    

这将在测试 > 输出 > 调试中保存故障点的屏幕截图。我的 cests 中有几个测试,所以我使用 time() 来为失败的屏幕截图名称提供变化,以确保我为每个失败的测试都有一个屏幕截图。

【讨论】:

我发现 $I->pauseExection() 不起作用(它不会暂停/等待 Enter )。来自文档codeception.com/docs/modules/WebDriver#pauseExecution 它说如果系统处于调试模式它将暂停 - 如何将其置于调试模式? 您是否尝试过使用调试标志运行测试? codecept run --debug testname

以上是关于如何阻止 codeception/selenium 在断言失败时关闭浏览器窗口?的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用Internet Explorer 11 / IE11运行Codeception / Selenium时的PHPUnit_Framework_Exception

HTML如何阻止事件冒泡?求源码分析

如何解除浏览器的阻止功能

JS如何阻止事件冒泡

如何取消Java已被阻止

js函数中 如何阻止事件冒泡