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

Stu*_*ser 4 .net phantomjs selenium-webdriver

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

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

Driver.SwitchTo().Alert().Accept();
Run Code Online (Sandbox Code Playgroud)

是?

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

小智 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;
                }
            }
Run Code Online (Sandbox Code Playgroud)

稍后在您希望警报发生的代码中

IAlert potentialAlert = GetSeleniumAlert();
                if (potentialAlert != null) //will always be null for PhantomJS
                {
                    //code to handle Alerts
                    IAlert alert=webDriver.SwitchTo().Alert();
                    alert.Accept();
                }
Run Code Online (Sandbox Code Playgroud)

对于PhantomJS,我们将警报的默认响应设置为accept.