Selenium RemoteWebDriver中的NTLM身份验证

per*_*000 7 c# selenium ntlm selenium-server selenium-webdriver

我想在C#测试中使用Selenium HtmlUnit驱动程序.据我所知,在C#中使用HtmlUnit驱动程序的唯一方法是通过Selenium服务器和RemoteWebDriver:

var driver = new OpenQA.Selenium.Remote.RemoteWebDriver(
    OpenQA.Selenium.Remote.DesiredCapabilities.HtmlUnitWithJavaScript());
Run Code Online (Sandbox Code Playgroud)

但是,我还需要使用NTLM身份验证.在Java中使用非远程驱动程序,它显然可以像这样配置:

WebDriver driver = new HtmlUnitDriver() {    
  protected WebClient modifyWebClient(WebClient client) { 
      // Does nothing here to be overridden. 
      DefaultCredentialsProvider creds = new DefaultCredentialsProvider(); 
      creds.addNTLMCredentials("userName", "password", null, -1,  "myComputerName", "myDomain"); 
      client.setCredentialsProvider(creds); 

      return client; 
    }  
}
Run Code Online (Sandbox Code Playgroud)

(来源:https://groups.google.com/forum/#!topic/ webdriver/ ktIWIs5m0mQ)

但是,由于我使用C#,这显然无法解决我的问题.我怎样才能做到这一点 ?(我可以成功使用Chrome,但我想使用HtmlUnit来提高速度).

谢谢 !

Jos*_*ake 1

为了传递凭据,您需要重载 的modifyWebClientHtmlUnitDriver如您在讨论链接1中看到的那样。

对于 .NET 开发人员来说,使用 HtmlUnitDriver 的唯一方法是通过.NET 2RemoteWebDriver的 HtmlUnit 包装器的讨论,开发人员选择不公开所有驱动程序类:HtmlUnit

我讨厌在 .NET 绑定中添加任何更多的依赖项...如果您执意要使用 HtmlUnit 作为您选择的无头浏览器,您始终可以通过 RemoteWebDriver 使用它

因此,您不能将 NTLM 或任何其他凭据方法与 RemoteWebDriver 一起使用。

如果您愿意做并维护这项工作,您可以转换所有 HtmlUnit 代码,如@JasonPlutext 的答案3的第二个链接中详细说明。

  1. 原始示例似乎来自selenium FAQ
  2. 链接至是否有适用于 .NET 的 HtmlUnitDriver?这里就这样。