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

问题描述

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

但是,当我运行测试类中的所有过程时,我会收到一个关于

的对话框

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

这是一个浏览器模式警报,因此随后的所有测试都失败了,因为浏览器无法离开该页面

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

谢谢!

解决方法

我发现了不同测试框架的类似问题:Prevent onbeforeunload dialog from interfering with tests

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

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

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

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

编辑:我认为这不可行。

Remove Alert box before it pops up

,

在设置一段时间后,唯一通过的方法是将 restart 属性设置为 true(默认为 false):

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...