Selenium Driver在无法接受警报身份验证框期间超时

时间:2018-07-04 09:19:33

标签: selenium selenium-webdriver selenium-chromedriver

我正在使用Java语言的Selenium Webdriver。 我正在使用一个简单的get方法来打开URL。此URL向我显示一个警报身份验证框,但此警报阻止了页面加载。 我的get方法抛出超时异常并关闭页面,在此get方法期间,我无法执行任何代码行。我无法调整此警报身份验证框。

有什么办法可以处理? 谢谢

我的代码:

driver = new ChromeDriver(capabilities);
app = new EventFiringWebDriver(driver);
seleniumEvent handler = new seleniumEvent();
app.register(handler);
app.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
app.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);
wait = new WebDriverWait(app, 60);


app.get(URL_1);

我从app.get(URL_1);收到了TimeOut异常

3 个答案:

答案 0 :(得分:2)

对于关闭警报身份验证框,您需要登录到服务器,其名称为“基本身份验证”。来自Wiki的信息:

  

URL编码

在访问基本访问身份验证时,客户端可以通过在URL的主机名前添加username:password @来避免登录提示。例如,以下内容将使用安全的HTTPS协议访问网站www.example.com上的页面index.html,并通过基本授权提供用户名Aladdin和密码OpenSesame凭据:

https://Aladdin:OpenSesame@www.example.com/index.html

所以您可以这样:

try {
        driver.get("https://" + userName + ":" + password + "@" + YOUR_URL.split("https://")[1]);
    } catch (UnsupportedCommandException e) {
        LOGGER.error("Can't login to server occur error!!!", e);
    }

答案 1 :(得分:0)

尝试一下:

  public class A {

    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        driver.get("url here");
        WebDriverWait wait = new WebDriverWait(driver, 10);
        try {
            if (wait.until(ExpectedConditions.alertIsPresent()) != null) {
                driver.switchTo().alert().dismiss();
            }
        } catch (TimeoutException e) {

        }
    }
}

答案 2 :(得分:0)

您可以参考

try {
      app.get(URL_1);
    } catch (Exception e) {
        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.alertIsPresent());
        Alert alert = webDriver.switchTo().alert();
        alert.accept();
    }

如果网页在打开时收到警报,它将在Catch块中处理警报。