我想在java中使用HTMLUnitDriver来处理警报。我使用以下代码来使用firefox驱动程序处理警报,它工作正常。
Alert alert = driver.switchTo().alert();
alert.accept();
但HTMLUnitDriver给出了错误,如
java.lang.UnsupportedOperationException: alert()
如何处理警报框?
答案 0 :(得分:0)
如果您不需要检查警报是否实际显示,我建议您更改JavaScript alert()
方法的行为以改为记录消息:
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()
appears to do nothing except confirm that the alert is present。由于警报无法解除,因此使用上述方法关闭警报可能是最佳/唯一的解决方案。如果必须使用HtmlUnitDriver
测试警报,则可能需要进行两次单独的测试 - 一次用于检查警报是否出现,另一次用于在警报被禁用时检查浏览器是否正常运行。
如果您迫切需要警报处理,并且您可以从源代码构建alert handling has been implemented in the master
branch of HtmlUnitDriver
。不过,我不确定它什么时候会包含在发行版中。
答案 1 :(得分:-1)
几年前就已经在HTMLUnitDriver中提出了实现alert-API的请求。这是链接:
由于这似乎是一个难以破解的难题,你必须考虑一些技巧来规避JavaScript中的模态对话框(警报,确认......)。至少在他们实现了alert-API之前。
阻止模式对话框显示的技巧包括向Selenium脚本添加其他JavaScript。例如,更改回调函数以避开警报框。
另外,请注意,无法使用JavaScript本身关闭/取消/确认模式对话框。这就是你应该阻止他们展示的原因。这是出于安全原因。
在实现alert-API之前,这是使用HtmlUnitDriver处理它的唯一方法。