繁体   English   中英

使用 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 生成的。

您无法使用 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”框架的情况下编写自己的实现。

当通过 url 传递凭据不起作用时,您可以通过使用外部软件“AutoIt V3”来做到这一点。这与 Windows 身份验证配合得很好。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM