使用 Selenium Webdriver 处理 Windows 身份验证

lyn*_*ker 4 c# selenium windows-authentication 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();
Run Code Online (Sandbox Code Playgroud)

  IAlert alert = _Driver.SwitchTo().Alert();
  alert.SendKeys("LynnTest\\t");
  alert.SendKeys("Welcome1!");
  _Driver.SwitchTo().Alert().Accept();
  _Driver.SwitchTo().DefaultContent();
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

And*_*rew 5

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

但是您可以在不获得此窗口的情况下进行身份验证。

有两种方法可以错过它:

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

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

    2.1. 如果服务的 cookie 生命周期较短,您可以从步骤 2 开始在您的个人资料中额外为您的浏览器使用“AutoAuth”插件。

upd:据我所知,selenium 3.0 有一些新方法,您需要进行更多搜索。这是太旧的答案。如果你能以更好的方式风,请给我打电话。


  1. 您可以使用“White”框架通过登录弹出窗口编写自己的登录实现。在需要的步骤中,您可以检查所有显示的操作系统窗口的“正确”标题。如果存在此类标题,请获取窗口的句柄。并使用“白色”进行登录。

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