如何使用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 

我在申请中遇到过这个问题。

我们通常可以用以下两种方法来处理这个问题。

  1. 在url本身传递用户名和密码

  2. 您可以在打开网址之前创建一个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); 
Interesting Posts