使用 Selenium Webdriver 处理 Windows 身份验证

Handling Windows authentication with Selenium Webdriver

C# 中基于 Selenium Webdriver 的测试必须使用 windows 身份验证登录。

我尝试了几种方法:

  _Driver.SwitchTo().Alert();
  _Driver.FindElement(By.Id("UserName")).SendKeys("LynnTest");
  _Driver.FindElement(By.Id("Password")).SendKeys("Welcome1!");
  _Driver.SwitchTo().Alert().Accept();
  _Driver.SwitchTo().DefaultContent();

  IAlert alert = _Driver.SwitchTo().Alert();
  alert.SendKeys("LynnTest\t");
  alert.SendKeys("Welcome1!");
  _Driver.SwitchTo().Alert().Accept();
  _Driver.SwitchTo().DefaultContent();

没有一个成功。我的本地系统上没有 windows 身份验证对话框,因此我无法查看源代码以确定如何使用 Selenium By 方法找到用户名和密码。

我相信 windows 身份验证对话框是由浏览器提供的,但我还没有找到该对话框的任何来源。

如何使用 Selenium(不是 AutoIt 或其他类似工具)将用户名和密码传递到 windows 身份验证对话框?解决方案必须基于 Selenium 代码,而不是加载项,我无法访问云端的浏览器。

注意:在 URL 中传递用户名和密码不起作用,据我所知,因为对话框不是由页面上的 html 生成的。

您不能通过此 window 使用 Selenium 进行身份验证。因为这不是浏览器 window,而是 OS 的身份验证弹出窗口。 Selenium 无法与浏览器以外的其他进程一起工作。

但是你可以在没有得到这个的情况下进行授权 window。

有两种方法可以错过:

  1. 将 URL with authentication 更改为:http://user:password@www.yourserveradress.com 。这将在部分情况下起作用,并将对您进行所需服务的身份验证。在另一种情况下,您可以使用方法 2。[太旧的方法,现在不起作用]

  2. 您需要在浏览器中创建一个新的配置文件,将身份验证传递给所需的服务并记住 password/authentication。而且,ofc,在你的测试中使用创建的浏览器配置文件。

    2.1。如果服务的 cookie 寿命较短,您可以在第 2 步的个人资料中为您的浏览器额外使用“AutoAuth”插件。

更新:据我所知,selenium 3.0 有一些新方法,您需要搜索更多。这是太旧的答案。如果你能走得更好,请联系我。


  1. 您可以使用“白”框架编写自己的登录弹窗登录实现。在需要的步骤中,您可以检查所有显示的 OS 的 windows 的“正确”标题。如果存在这样的标题,请获取 window 的句柄。并使用“白色”进行登录。

  2. 您可以使用以下项目https://github.com/ukushu/DialogCapabilities作为示例,在不使用“White”框架的情况下编写您自己的实现。

当通过 url 传递凭据无效时,您可以使用外部软件 "AutoIt V3" 这适用于 windows 身份验证。

最后我使用了一个解决方法,首先导航到身份验证页面,进行身份验证,然后重定向到要作为经过身份验证的用户进行测试的页面。此方法使用可以编写脚本的页面内部身份验证页面。