如何使用Java处理Selenium WebDriver的身份验证弹出窗口
我正在尝试使用下面的代码来处理身份验证弹出窗口:
FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("network.http.phishy-userpass-length", 255); profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "xxxx"); driver = new FirefoxDriver(profile); baseUrl="http://" + login + ":" + password + "@" + url; driver.get(baseUrl + "/");
当我执行测试时,页面显示认证弹出窗口,并仍然加载一个,直到我点击取消按钮。 那一刻,我可以访问到下一个页面,这意味着认证成功,但始终显示认证弹出窗口
警报方法authenticateUsing()
允许您跳过Http基本身份验证框。
WebDriverWait wait = new WebDriverWait(driver, 10); Alert alert = wait.until(ExpectedConditions.alertIsPresent()); alert.authenticateUsing(new UserAndPassword(username, password));
截至3.4版本,它仍处于测试阶段
目前只有
InternetExplorerDriver
完成实施
不要使用Firefox的个人资料,并尝试下面的代码:
driver.get("http://UserName:Password@Example.com");
如果你在IE浏览器中实现它,你需要做某些事情。
如果您的身份验证服务器要求域名为“domainuser”的用户名,则需要在URL中添加双斜杠/
//localdomain\user:password@example.com
我在申请中遇到过这个问题。
我们通常可以用以下两种方法来处理这个问题。
-
在url本身传递用户名和密码
-
您可以在打开网址之前创建一个AutoIT脚本并调用脚本。
请检查下面我已经提到的两种方式的文章:
在Selenium Webdriver中处理认证/登录窗口
这应该适用于Firefox使用AutoAuth插件 :
FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default"); File ffPluginAutoAuth = new File("D:\\autoauth-2.1-fx+fn.xpi"); firefoxProfile.addExtension(ffPluginAutoAuth); driver = new FirefoxDriver(firefoxProfile);
如果您必须处理NTLM代理身份验证,则可以使用CNTLM配置本地代理。
凭证和域在/etc/cntlm.conf
中配置。
之后,您可以使用自己的代理来处理所有的NTLM内容。
DesiredCapabilities capabilities = DesiredCapabilities.chrome(); Proxy proxy = new Proxy(); proxy.setHttpProxy("localhost:3128"); capabilities.setCapability(CapabilityType.PROXY, proxy); driver = new ChromeDriver(capabilities);