我想在 java 中使用 HTMLUnitDriver 处理警报。我正在使用以下代码使用 firefox 驱动程序处理警报,它工作正常。
Alert alert = driver.switchTo().alert();
alert.accept();
但 HTMLUnitDriver 给出的错误如下
java.lang.UnsupportedOperationException: alert()
如何处理那里的警报框?
我想在 java 中使用 HTMLUnitDriver 处理警报。我正在使用以下代码使用 firefox 驱动程序处理警报,它工作正常。
Alert alert = driver.switchTo().alert();
alert.accept();
但 HTMLUnitDriver 给出的错误如下
java.lang.UnsupportedOperationException: alert()
如何处理那里的警报框?
如果您不需要检查警报是否实际出现,我建议您更改 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.25
,HtmlUnitDriver.switchTo().alert().accept()
不再抛出UnsupportedOperationException()
. 但是,accept()
除了确认警报存在之外,似乎什么都不做。由于无法关闭警报,因此使用上述方法关闭警报可能是最好/唯一的解决方案。如果您必须使用 测试警报HtmlUnitDriver
,您可能需要两个单独的测试——一个用于检查警报是否出现,另一个用于检查在禁用警报时浏览器是否正确运行。
如果您迫切需要警报处理并且您可以从源代码构建,警报处理已master
在HtmlUnitDriver
. 不过,我不确定它何时会包含在发行版中。
在 HTMLUnitDriver 中实现 alert-API 的请求已在几年前提出。这是链接:
由于这似乎很难破解,因此您必须考虑一些技巧来规避 JavaScript 中的模式对话框(警报、确认等)。至少在他们实现了 alert-API 之前。
阻止显示模式对话框的技巧包括向 Selenium 脚本添加额外的 JavaScript。例如更改回调函数以避免警报框。
另外,请注意不可能使用 JavaScript 本身关闭/取消/确认模式对话框。这就是为什么你应该阻止他们展示的原因。这是出于安全原因。
在实现 alert-API 之前,这是使用 HtmlUnitDriver 处理它的唯一方法。