【问题标题】:Dismiss leave page dialogs automatically using Chromedriver (Codeception)使用 Chromedriver (Codeception) 自动关闭离开页面对话框
【发布时间】:2021-04-07 11:19:56
【问题描述】:

我编写了一系列独立执行的验收测试。我正在使用 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 强制关闭当前窗口并尝试新窗口?

谢谢!

【问题讨论】:

    标签: selenium-chromedriver codeception


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      使用 Codeception 你必须使用executeJS 方法:

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

      【讨论】:

      • 感谢您的回复。我在页面加载后添加了 executeJS 代码,并且对话框不断显示(视频 URL 在末尾)。我检查了控制台日志,没有显示任何错误。这是解决问题的 PITA。 dsc.cloud/6946fd/…
      • 可能您必须在 amOnPage 之后添加一个短暂的等待期,以延迟 javascript 的执行,直到页面完全加载。请通过codeception.com/docs/modules/WebDriver#wait查看可用的方法
      • 再次感谢您的反馈,等待没有影响,但确实找到了通过 WebDriver 属性解决此问题的方法,请在下面查看。
      【解决方案3】:

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

      编辑:我认为这不可行。

      Remove Alert box before it pops up

      【讨论】:

      • 谢谢,但这不是 Web 应用程序创建的对话框,对话框是在浏览器级别创建的,因此 jQuery 无法与其交互(AFAIK)。
      猜你喜欢
      • 2020-10-27
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多