作为Selenium的PhantomJSDriver的新手,它如何处理JS警报?
我找到了JSPhantom onAlert文档,但等效的PhantomJSDriver代码是什么
Driver.SwitchTo().Alert().Accept();
是
目前,我已经提前返回PhantomJSDriver
的保护条款,以阻止异常,但是如何与PhantomJS中的js警报进行交互?
答案 0 :(得分:7)
我在使用PhantomJS Web Driver处理警报方面遇到了类似的问题。以下代码似乎解决了这个问题。 这是一个C#实现,但也应该与Java一起使用..
public IAlert GetSeleniumAlert()
{
//Don't handle Alerts using .SwitchTo() for PhantomJS
if (webdriver is PhantomJSDriver)
{
var js = webdriver as IJavaScriptExecutor;
var result = js.ExecuteScript("window.confirm = function(){return true;}") as string;
((PhantomJSDriver)webdriver).ExecutePhantomJS("var page = this;" +
"page.onConfirm = function(msg) {" +
"console.log('CONFIRM: ' + msg);return true;" +
"};");
return null;
}
try
{
return webdriver.SwitchTo().Alert();
}
catch (NoAlertPresentException)
{
return null;
}
}
稍后在您希望发生警报的代码中
IAlert potentialAlert = GetSeleniumAlert();
if (potentialAlert != null) //will always be null for PhantomJS
{
//code to handle Alerts
IAlert alert=webDriver.SwitchTo().Alert();
alert.Accept();
}
对于PhantomJS,我们将警报的默认响应设置为接受。
答案 1 :(得分:3)
我不认为PhantomJS目前支持警报处理。
要简单地接受警报,(在Python / Splinter中)为每个稍后会有警报的重新加载页面尝试此操作。
driver.execute_script("window.confirm = function(){return true;}");
查看更多参考资料here。