如何使用 java 在 selenium webdriver 的下一个选项卡中处理需要弹出的身份验证?

How to handle authentication required pop up in next tab in selenium webdriver using java?

在 Chrome 中,单击某个 link 会打开一个带有 "Authentication Required" 弹出窗口的新选项卡。如您所见,它有 'User name' 和 'password' 以及 'Log In' 和 'Cancel' 按钮。

使用 Java 代码,如何在此弹出窗口中输入值(用户名和密码)?因为我无法获取用户名和密码的定位器,而且警报方法在这里不起作用。

我试过的代码:

public static void switchToalert() {
    driver.switchTo().alert();
    // Selenium-WebDriver Java Code for entering Username & Password as // below: 
    driver.findElement(By.id("Username")).sendKeys("userName");
    driver.findElement(By.id("Password")).sendKeys("myPassword");
    driver.switchTo().alert().accept();
    driver.switchTo().defaultContent();
}  

谢谢 戈温德

使用 Selenium Webdriver 处理 Windows 身份验证

您可以在 URL 本身中提供凭据,这意味着我们将在 URL 中添加用户名和密码,因此当 运行 脚本将绕过相同的

http://username:password@yourWebURL
##example##

http:
//GuravPraveen:Passwrd123@YourURL


driver.get("http://GuravPraveen:Passwrd123@www.xyz.com/signin");

我使用的非常成功的方法是设置一个嵌入式 Browsermob 代理服务器(在 Java 代码中)并注册一个 RequestInterceptor 来拦截所有传入的请求(即匹配主机 / URL 有问题的模式)。

当您有一个需要基本身份验证的请求时,add an Authorization HTTP header 具有所需的凭据('Basic ' + Base64 编码的 'user:pass' 字符串。所以对于 'foo:bar' 你应该设置值 Basic Zm9vOmJhcg==)

启动服务器,将其设置为网络代理for Selenium traffic,当发出需要身份验证的请求时,代理将添加header,浏览器将看到它,验证凭据,不需要弹出对话框。

您根本不需要处理对话框。另一个好处是,因为它是一个纯 HTTP 解决方案,所以它在所有浏览器和操作系统上的工作方式都是一样的。