使用 Chromedriver (Codeception) 自动关闭离开页面对话框

Dismiss leave page dialogs automatically using Chromedriver (Codeception)

我编写了一系列独立执行时有效的验收测试。我正在使用 ChromeDriver 通过 Codeception 执行此测试。

但是,当我 运行 测试所有程序时 class 我得到一个关于

的对话框

This page is asking you to confirm that you want to leave - data you have entered may not be saved.

这是浏览器模态警报,因此由于浏览器无法离开此页面,因此所有后续测试均失败。

在 Codeception 或 Chromedriver 中有没有办法接受带有默认键的对话框,以便可以按顺序执行其他测试?或者告诉 Codeception 强制关闭当前 window 并尝试新的 window?

谢谢!

我相信你可以注入 jQuery 来删除确认框。 (免责声明:不是网站编码员)。

编辑:我认为这不可行。

Remove Alert box before it pops up

我发现了针对不同测试框架的类似问题:

建议的解决方案是在每次加载页面后执行 window.onbeforeunload = undefined;

对于 Codeception,您必须使用 executeJS 方法:

$I->amOnPage('/');
$I->executeJS('window.onbeforeunload = undefined;');

玩了一会儿设置后,唯一通过的方法是将 restart 属性 设置为 true(默认为 false):

        WebDriver:
            url: 'http://localhost:8080/'
            wait: 2
            window_size: false # disabled in ChromeDriver
            port: 9515
            browser: chrome
            restart: true

这将关闭浏览器 window 并且不会显示该对话框。下次测试会打开新的浏览器

此解决方案会使验收 运行 测试变得更慢,所以我很想看看是否还有其他人有更好的解决方案!

值得注意的是,我尝试使用 unexpectedAlertBehaviour capability,无论我有什么价值,警报都不会被解除。