6

我想在 java 中使用 HTMLUnitDriver 处理警报。我正在使用以下代码使用 firefox 驱动程序处理警报,它工作正常。

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

但 HTMLUnitDriver 给出的错误如下

java.lang.UnsupportedOperationException: alert() 

如何处理那里的警报框?

4

2 回答 2

0

如果您不需要检查警报是否实际出现,我建议您更改 JavaScriptalert()方法的行为以记录消息:

JavascriptExecutor javascriptExecutor = (JavascriptExecutor) webDriver;
javascriptExecutor.executeScript("window.alert = function(message){ console.log(message); };" +
    "window.confirm = function(message){ console.log(message); return true; };");

然后你可以跳过HtmlUnitDriver.switchTo().alert().accept()你的代码。

注意:如果警报出现在初始页面加载时,此方法将不起作用,因为 Selenium 在与其交互之前等待页面加载。所以上面的 JavaScript 会执行得太晚。


HtmlUnitDriver版本开始2.25HtmlUnitDriver.switchTo().alert().accept()不再抛出UnsupportedOperationException(). 但是,accept()除了确认警报存在之外,似乎什么都不做。由于无法关闭警报,因此使用上述方法关闭警报可能是最好/唯一的解决方案。如果您必须使用 测试警报HtmlUnitDriver,您可能需要两个单独的测试——一个用于检查警报是否出现,另一个用于检查在禁用警报时浏览器是否正确运行。


如果您迫切需要警报处理并且您可以从源代码构建,警报处理已masterHtmlUnitDriver. 不过,我不确定它何时会包含在发行版中。

于 2017-03-10T03:40:10.120 回答
-1

在 HTMLUnitDriver 中实现 alert-API 的请求已在几年前提出。这是链接:

https://code.google.com/p/selenium/issues/detail?id=1105&q=alert%28%29&colspec=ID%20Stars%20Type%20Status%20Priority%20Milestone%20Owner%20Summary

由于这似乎很难破解,因此您必须考虑一些技巧来规避 JavaScript 中的模式对话框(警报、确认等)。至少在他们实现了 alert-API 之前。

阻止显示模式对话框的技巧包括向 Selenium 脚本添加额外的 JavaScript。例如更改回调函数以避免警报框。

另外,请注意不可能使用 JavaScript 本身关闭/取消/确认模式对话框。这就是为什么你应该阻止他们展示的原因。这是出于安全原因。

在实现 alert-API 之前,这是使用 HtmlUnitDriver 处理它的唯一方法。

于 2015-06-01T10:32:52.953 回答