使用Selenium测试onbeforeunload事件

12

我正在尝试为一个使用onbeforeunload事件在用户离开之前提示用户的网页编写Selenium测试。然而,Selenium似乎无法识别出弹出的确认对话框,也没有提供方法来点击“确定”或“取消”。有没有什么方法可以解决这个问题?如果有关的话,我正在使用Java Selenium驱动程序。

4个回答

4
您可以编写一个用户扩展程序(或者只是在storeEval等中编写一些JavaScript代码),测试window.onbeforeunload是否已设置,然后在继续页面之前将其替换为null。虽然不太美观,但应该能让您离开该页面。

我最终没有这样做(我的要求改变了,以至于我最好还是使用普通警告),但这看起来会行,而且接近Selenium处理其他警告的方式。 - Moss Collum
这只是对于我来说在打开之前添加 js_eval "window.onbeforeunload=null" 的问题。(使用 Ruby 中的 selenium-client,但您应该能够轻松地将其翻译成其他语言) - Bryan Larsen

1

我刚刚为我的一个应用程序做了这件事情,其中onbeforeunload处理程序会在文档处于未保存状态时,如果用户离开页面,则弹出提示。Python代码:

driver.switch_to.alert.accept()

Java的等价代码为:
driver.switchTo().alert().accept();

如果警报框不存在,则上述代码将失败并出现NoAlertPresentException,因此在接受提示之前没有必要进行单独的存在性检查。
我正在运行Selenium 2.43.0,但我认为这已经可行了一段时间了。
在我不想让提示框弹出的情况下,因为那不是我测试的内容,我会在浏览器中运行自定义JavaScript来将window.onbeforeunload设置为null,然后离开页面。我将其放置在测试拆卸代码中。

1

我遇到了与“beforeunload”事件监听器相同的问题,LUMINUS!这是一个Chrome插件,它可以帮助我仅仅在插件中阻止事件监听器。


0

当我在使用Selenium时遇到了对浏览器的有限控制,我转向MozLab插件解决了我的问题,但仅适用于一个浏览器平台。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接