如何使用WebDriver在PhantomJS中处理/接受JS警报?[英] How to handle/accept JS Alerts in PhantomJS using WebDriver?

问题描述

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

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

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

是?

目前,我已经提前返回了 PhantomJSDriver 的保护子句,以阻止异常,但是应该如何与 PhantomJS 中的 js 警报交互?

推荐答案

我在 PhantomJS Web 驱动程序处理警报时遇到了类似的问题.下面的代码似乎解决了这个问题.这是一个 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,我们将警报的默认响应设置为接受.

其他推荐答案

我认为 PhantomJS 目前不支持警报处理.

为了简单地接受警报,(在 Python/Splinter 中)对每个稍后将有警报的重新加载页面尝试此操作.

driver.execute_script("window.confirm = function(){return true;}");

此处查看更多参考.

本文地址:https://www.itbaoku.cn/post/1740000.html