防止onbeforeunload对话框干扰测试

时间:2017-12-06 20:38:21

标签: google-chrome selenium capybara selenium-chromedriver

我希望在由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上。如果需要,将使用更多信息更新此帖子。

这可能吗?

1 个答案:

答案 0 :(得分:0)

要让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)

虽然,如果您的应用在注册之前注册了很多,您可能想重新考虑您的设计选择 - 这对用户来说真的很烦人。