如何使用Java处理Selenium WebDriver的身份验证弹出窗口

Ime*_*HOK 50 java authentication selenium popup selenium-webdriver

我正在尝试使用以下代码处理身份验证弹出窗口:

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "x.x.x.x");
driver = new FirefoxDriver(profile);
baseUrl="http://" + login + ":" + password + "@" + url;
driver.get(baseUrl + "/");
Run Code Online (Sandbox Code Playgroud)

当我执行测试时,页面显示身份验证弹出窗口,并且仍然加载直到我单击取消按钮.那一刻,我可以访问下一页,这意味着身份验证成功但仍然始终显示身份验证弹出窗口

Pra*_*ams 40

警报方法,authenticateUsing()让您跳过Http基本身份验证框.

WebDriverWait wait = new WebDriverWait(driver, 10);      
Alert alert = wait.until(ExpectedConditions.alertIsPresent());     
alert.authenticateUsing(new UserAndPassword(username, password));
Run Code Online (Sandbox Code Playgroud)

截至Selenium 3.4,它仍处于测试阶段

现在只执行实现 InternetExplorerDriver

  • 这似乎没有在.NET中实现:( (5认同)
  • 已删除 https://github.com/SeleniumHQ/selenium/commits/master/java/client/src/org/openqa/selenium/Alert.java (4认同)
  • 嗯,在最新的Chrome中,似乎基本的auth登录弹出窗口并不被视为"警报" (3认同)
  • 是的,这可能只是因为我使用的是ChromeDriver吗? (2认同)

小智 32

不要使用firefox配置文件并尝试下面的代码:

driver.get("http://UserName:Password@Example.com");
Run Code Online (Sandbox Code Playgroud)

如果您在IE浏览器中实现它,则需要执行某些操作.

如果您的身份验证服务器需要域名为"domainuser"的域名,则需要/在网址中添加双斜杠:

//localdomain\user:password@example.com
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用``driver.Navigate().GoToUrl("http:// UserName:Password@Example.com")`.这对我有用 (4认同)
  • 它没有工作同样的问题仍然存在 (3认同)

小智 7

我在申请中多次遇到这个问题.

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

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

  2. 您可以在打开URL之前创建AutoIT脚本并调用脚本.

请查看以下文章,其中我提到了两种方法:
在Selenium Webdriver中处理身份验证/登录窗口

  • 我之前也用过完全相同的方法,效果都很好。如果您正确编写命令,AutoIT 是一个非常可靠的工具,它非常稳定。 (2认同)

use*_*939 7

尝试以下解决方案,如有任何问题,请告诉我:

driver.get('https://example.com/')
driver.switchTo().alert().sendKeys("username" + Keys.TAB + "password");
driver.switchTo().alert().accept();
Run Code Online (Sandbox Code Playgroud)

这对我来说很好