当前位置: 首页 > 知识库问答 >
问题:

防止onbeforeunload对话框干扰测试

阎伟志
2023-03-14

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

我尝试在访问和刷新之前添加page.execute_script'window.onbeforeunload=未定义;',虽然这是可行的,但它共享了必须修改所有访问和刷新调用的问题。

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

我在Chromedriver v2上。33、Chrome 62、Capybara 2.5和Selenium webdriver 2.53.4。如果需要,我们将用更多信息更新这篇文章。

这可能吗?

共有1个答案

易宣
2023-03-14

要使Capybaras访问刷新方法总是调用您的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)

尽管如此,如果你的应用程序在卸载前注册,你可能需要重新考虑你的设计选择——这对用户来说真的很烦人。

 类似资料:
  • 我已经在Codeigniter上编写了一个简单的身份验证过程,但存在一个问题。 由于某些原因,当用户浏览站点时,会话会被混淆,并模拟另一个随机用户。 我只是做: 我通过

  • 我使用keycloak来管理基于Java的Web应用程序的身份验证。 我配置了一个Kerberos用户联合,该联合在内部网络中运行良好。 从网络外部访问Web应用程序,我会得到以下登录对话框,而不是转发到keycloak登录表单。 有趣的是,转发适用于Firefox,但不适用Edge、Chrome、IE。 如何阻止登录对话框并直接转发到keycloak-login-form? 编辑:例如,是否可以

  • 我需要在用户离开页面之前警告他们未保存的更改(这是一个相当常见的问题)。 这是可行的,但它引发了一个默认对话框,带有一个恼人的标准消息,包装了我自己的文本。我需要或者完全替换标准消息,这样我的文本就清晰了,或者(更好的是)用一个使用jQuery的模态对话框替换整个对话框。 到目前为止,我失败了,我还没有找到其他人似乎有答案。有可能吗? 我的页面中的Javascript: closeIt()函数:

  • 问题内容: 我需要在用户离开页面之前警告用户有关未保存的更改(这是一个非常常见的问题)。 这可以工作,但是会引发一个默认对话框,其中包含包装我自己的文本的刺激性标准消息。我需要完全替换标准消息,以使文本清晰,或者(甚至更好)使用jQuery将整个对话框替换为模式对话框。 到目前为止,我失败了,但是我还没有找到似乎有答案的其他人。可能吗 我页面中的Javascript: closeIt()函数: 我

  • 我已经编写了一个服务器-客户端(两个程序)结构,它工作正常。。。仅当使用TCP时。我的想法是使用TCP进行文本聊天传输(udp不可靠),但使用udp进行游戏数据包传输(是的,这是一种每秒30帧的动作游戏,所以我需要udp)。 但是,当我在客户端进程中与TCP建立连接时,我开始向服务器程序发送UDP数据包,并从服务器程序接收UDP数据包。客户端在单个线程中使用非阻塞套接字、UDP和TCP。这里没有多

  • 问题内容: 我有一个EditText用于输入的对话框。当我单击对话框上的“是”按钮时,它将验证输入,然后关闭对话框。但是,如果输入错误,我希望保留在同一对话框中。每次无论输入什么,当我单击“否”按钮时,都应自动关闭对话框。如何禁用此功能?顺便说一句,我在对话框上的按钮上使用了PositiveButton和NegativeButton。 问题答案: 编辑:这仅在API 8+上有效,如某些注释所述。