无法使用java webdriver

时间:2016-01-27 02:03:44

标签: java authentication webdriver alert hang

检索具有身份验证的网页时,我无法关闭对话框。见下面的例子:

webDriver.manage().timeouts().implicitlyWait(1, java.util.concurrent.TimeUnit.MINUTES);
webDriver.manage().timeouts().pageLoadTimeout(1, java.util.concurrent.TimeUnit.MINUTES);
webDriver.manage().timeouts().setScriptTimeout(1, java.util.concurrent.TimeUnit.MINUTES);
webDriver.get("http://sv2.biz/")
try {
    Alert alert = webDriver.switchTo().alert();
    alert.accept()
    alert.dismiss()
} catch (Exception e) {
    //do nothing
}

webDriver挂起无法使用。 webDriver不会超时,因此在终止java进程时它永远不会返回到网格。

2 个答案:

答案 0 :(得分:1)

Selenium无法与基本的auth弹出框进行交互。相反,您需要拦截网络流量并使用代理添加基本身份验证标头。

我个人的偏好是browsermob proxy

要将它挂钩到硒,你需要做这样的事情:

final String basicAuthKey = "base64_encoded_username_and_password";

BrowserMobProxy browserMobProxy = new BrowserMobProxyServer();
browserMobProxy.start();
browserMobProxy.addRequestFilter(new RequestFilter() {
    @Override
    public HttpResponse filterRequest(HttpRequest request, HttpMessageContents contents, HttpMessageInfo messageInfo) {
        request.headers().add("Authorization", basicAuthKey);

        return null;
    }
});
Proxy proxySettings = ClientUtil.createSeleniumProxy(browserMobProxy, InetAddress.getLoopbackAddress());
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(PROXY, proxySettings);
WebDriver driver = new ChromeDriver(capabilities);

显然,您将需要弄清楚将要使用的基本身份验证密钥是什么,最简单的方法是在授权后查看您的网络流量并查看“授权”标头已设置的内容至。如果您愿意,也可以手动编码用户名/密码。有关基本身份验证的详细信息,请单击Here

答案 1 :(得分:0)

如果这是身份验证弹出窗口,您可以使用您的应用程序URL的用户名和密码,如下所示:

https://username:password@www.sv2.biz

如果不起作用,请告诉我。