我已经编写了一系列验收测试,这些测试在独立执行时可以工作。我正在使用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强制关闭当前窗口并尝试新窗口?
谢谢!
我在不同的测试框架中发现了类似的问题:防止onbeforeunload对话框干扰测试
建议的解决方案是在每次页面加载后执行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
这将关闭浏览器窗口,并且不会显示对话框。将为下一次测试打开一个新浏览器。
这个解决方案会使验收运行测试变得更加缓慢,所以我很想看看是否有其他人有更好的解决方案!
值得注意的是,我尝试过使用unexpectedAlertBehaviour
功能,无论我有什么价值,警报都不会被解除。
我相信你可以注入jQuery来删除确认框。(免责声明:并非网站编码人员(。
编辑:我认为这不可行
请参阅弹出之前删除警报框