从 Selenium 测试 onbeforeunload 事件

Posted

技术标签:

【中文标题】从 Selenium 测试 onbeforeunload 事件【英文标题】:Testing onbeforeunload events from Selenium 【发布时间】:2010-09-14 21:55:43 【问题描述】:

我正在尝试为使用 onbeforeunload 事件在离开前提示用户的网页编写 Selenium 测试。 Selenium 似乎无法识别出现的确认对话框,也无法提供点击 OK 或 Cancel 的方法。有没有办法做到这一点?如果相关,我正在使用 Java Selenium 驱动程序。

【问题讨论】:

【参考方案1】:

您可以编写一个用户扩展(或者只是 storeEval 中的一些 javascript 等)来测试是否设置了 window.onbeforeunload,然后在从页面继续之前将其替换为 null。丑陋,但应该让你离开页面。

【讨论】:

我最终没有这样做(我的要求发生了变化,因此我最好还是使用常规警报),但这看起来可以解决问题,并且接近 Selenium 的处理方式测试其他警报。 这只是在对我开放之前添加js_eval "window.onbeforeunload=null" 的问题。 (Ruby 中的 selenium-client,但您应该能够轻松翻译成其他语言)【参考方案2】:

我只需要为我的应用程序执行此操作,如果用户在文档处于未保存状态时离开页面,onbeforeunload 处理程序会显示提示。 Python代码:

driver.switch_to.alert.accept()

Java 等价物是:

driver.switchTo().alert().accept();

如果警报不存在,上面的代码将失败并显示NoAlertPresentException,因此在接受提示之前无需单独测试来检查是否存在。

我正在运行 Selenium 2.43.0,但我认为这已经有一段时间了。

如果我根本不希望出现提示,因为这不是我正在测试的内容,我会在浏览器中运行自定义 JavaScript 以在离开页面之前将 window.onbeforeunload 设置为 null。我把它放在了测试拆解代码中。

【讨论】:

【参考方案3】:

在“beforeunlaod”事件监听器LUMINUS 上遇到了同样的问题!一个 chrome 插件,可以帮助我阻止插件中的事件侦听器,仅此而已..

【讨论】:

【参考方案4】:

警告:这提供了另一种解决方案

Watij -- http://watij.com/ -- 可以在这里提供帮助。或者,如果您对 ruby​​ 感到满意,watir 可以提供帮助 -- http://wtr.rubyforge.org/install.html

【讨论】:

【参考方案5】:

当我遇到使用 Selenium 对浏览器的有限控制时,我求助于 MozLab 插件,如果仅适用于一个浏览器平台,它就解决了我的问题。

【讨论】:

以上是关于从 Selenium 测试 onbeforeunload 事件的主要内容,如果未能解决你的问题,请参考以下文章

Python自动化测试之selenium从入门到精通

使用 Selenium / Protractor 进行测试时从网站获取注入的 javascript

如何从命令行使用 maven 运行 selenium 测试?

如何从 @AfterMethod 中的 TestNG/Selenium 获取测试结果状态?

golang从入门到精通,搭建本地selenium自动化测试环境

selenium知识思维导图|从元素定位到操作断言,助你快速入门自动化测试