如何使用WebDriver处理/接受PhantomJS中的JS警报?

时间:2015-04-23 10:16:22

标签: .net selenium-webdriver phantomjs

作为Selenium的PhantomJSDriver的新手,它如何处理JS警报?

我找到了JSPhantom onAlert文档,但等效的PhantomJSDriver代码是什么

Driver.SwitchTo().Alert().Accept();

目前,我已经提前返回PhantomJSDriver的保护条款,以阻止异常,但是如何与PhantomJS中的js警报进行交互?

2 个答案:

答案 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