我希望在由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上。如果需要,将使用更多信息更新此帖子。
这可能吗?
答案 0 :(得分:0)
要让Capybaras visit
和refresh
方法始终首先调用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)
虽然,如果您的应用在注册之前注册了很多,您可能想重新考虑您的设计选择 - 这对用户来说真的很烦人。