【问题标题】:Prevent onbeforeunload dialog from interfering with tests防止 onbeforeunload 对话框干扰测试
【发布时间】:2017-12-06 20:38:21
【问题描述】:

我希望禁用在 Capybara 启动的 Chrome 实例中从 onbeforeunload 生成的对话框。我有一个非常大的测试套件,修改每次访问/刷新以包含点击“离开”确认的代码是不切实际的。

我曾尝试在访问和刷新之前添加page.execute_script ‘window.onbeforeunload = undefined;’,虽然这可行,但它也存在必须修改所有访问和刷新调用的问题。

我还检查了是否可以添加任何 Chrome CLI 选项来禁用此功能,但我没有找到任何相关内容。我在这里检查过:https://peter.sh/experiments/chromium-command-line-switches/,但在搜索卸载、警报和对话框后,没有任何匹配项似乎相关。

我使用的是 Chromedriver v2.33、Chrome 62、Capybara 2.5 和 Selenium-webdriver 2.53.4。如果需要,将使用更多信息更新此帖子。

这可能吗?

【问题讨论】:

    标签: google-chrome selenium capybara selenium-chromedriver


    【解决方案1】:

    要让 Capybaras visitrefresh 方法总是首先调用你的 execute_script,最简单的解决方案是这样的

    module BeforeUnloadDisabler
      def visit(*args)
        execute_script 'window.onbeforeunload = undefined;'
        super
      end
    
      def refresh(*args)
        execute_script 'window.onbeforeunload = undefined;'
        super
      end
    end
    
    ::Capybara::Session.prepend(BeforeUnloadDisabler)
    

    不过,如果您的应用在卸载前注册了太多警报,您可能需要重新考虑您的设计选择——这对用户来说真的很烦人。

    【讨论】:

      猜你喜欢
      • 2011-07-17
      • 2012-04-16
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多