使用Selenium Webdriver处理Windows身份验证

4

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


1
请阅读这篇文章 - Saifur
如果您使用本地帐户/域帐户进行身份验证,则我有一个可行的解决方法。https://dev59.com/_14c5IYBdhLWcg3wVo9I#33666642 - Steven
@Saifur;那个链接已经失效了。 - batpox
3个回答

5
您无法通过Selenium在此窗口进行身份验证。因为这不是浏览器窗口,而是操作系统的身份验证弹出窗口。Selenium无法与浏览器以外的其他进程一起工作。
但是您可以在没有获取此窗口的情况下进行身份验证。
有两种方法可以避免它:
1. 使用具有身份验证的URL:http://user:password@www.yourserveradress.com。这将在某些情况下起作用,并将使您对所需服务进行身份验证。在另一种情况下,您可以使用第二种方法。[过时的方法,现在不起作用]
2. 您需要在浏览器中创建一个新配置文件,通过身份验证到所需服务并记住密码/身份验证。当然,在您的测试中使用已创建的浏览器配置文件。
2.1. 如果服务的Cookie寿命很短,则可以在步骤2中的配置文件中另外使用“AutoAuth”插件。
更新:据我所知,Selenium 3.0有一种新的方法,您需要搜索更多信息。这是太旧的答案。如果您找到更好的方法,请通知我。
  1. 您可以通过“White”框架中的登录弹出窗口编写自己的登录实现。在必要的步骤中,您可以检查所有显示的操作系统窗口是否具有“正确”的标题。如果存在这样的标题,则获取窗口句柄,并使用“White”进行登录。

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


0

当通过URL传递凭据无法工作时,您可以使用外部软件“AutoIt V3”来解决此问题。这在Windows身份验证中非常有效。


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

2
你在问题中提供了不起作用的代码,但在答案中没有提供任何代码。这并不是很有帮助。 - batpox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接