Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在公司代理(Java)后面使用Selenium RemoteWebDriver_Java_Selenium_Firewall_Apache Httpclient 4.x - Fatal编程技术网

在公司代理(Java)后面使用Selenium RemoteWebDriver

在公司代理(Java)后面使用Selenium RemoteWebDriver,java,selenium,firewall,apache-httpclient-4.x,Java,Selenium,Firewall,Apache Httpclient 4.x,我正试图在一些远程自动化服务(Sauce实验室、Browserstack等)上运行Selenium测试,并遇到了一些问题,这些问题通过我的公司防火墙攻击了它们的API 请注意,我尝试测试的应用程序不是在防火墙后面,而是可以公开访问的 DesiredCapabilities caps = DesiredCapabilities.internetExplorer(); caps.setCapability("platform", "Windows 7"); caps.setCapability("v

我正试图在一些远程自动化服务(Sauce实验室、Browserstack等)上运行Selenium测试,并遇到了一些问题,这些问题通过我的公司防火墙攻击了它们的API

请注意,我尝试测试的应用程序不是在防火墙后面,而是可以公开访问的

DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability("platform", "Windows 7");
caps.setCapability("version", "9.0");
caps.setCapability("idleTimeout", "300");
caps.setCapability("name", "Invitation Tests");
driver = new RemoteWebDriver(new URL("https://user:key@saucelabs.com), caps);
问题似乎是Selenium的管道将用户:url中的密钥解释为代理凭据,因此它永远不会离开我们的网络。是否有任何特定的技巧来配置此功能?它似乎在幕后使用ApacheHttpClient


我认为我们使用的是NTLM代理,它似乎使用基本身份验证。这里可能也有同样的问题:

您链接到的谷歌代码问题似乎确实是原因。请注意,问题已经解决,因此您现在可以在创建RemoteWebDriver时注入自己的CommandExecutor实现

具体来说,您可能会这样做:

  • 编写一个
    org.openqa.selenium.remote.http.HttpClient.Factory
    的自定义实现,其行为类似于上一个,但允许您注入
    HttpClient
    实例(或者
    HttpClientFactory
    实例,如果您想将其子类化)。这是一个非常简单的接口,也是一个简单的复制实现,所以这应该很容易
  • 使用不同主机的不同凭据创建
    org.apache.http.impl.client.BasicCredentialsProvider
    的实例(有关详细信息,请参见
    org.apache.http.auth.AuthScope
  • 使用
    org.apache.http.impl.HttpClientBuilder
    使用您的凭据提供程序构造客户端
  • 构造一个HttpCommandExecutor的实例,传入自定义工厂的实例并注入客户端
  • 构造
    RemoteWebDriver
    的实例,传入命令执行器

谢谢!这就是我现在要做的。它最终变成了大量定制代码(两个内部类的完整副本,只做了一些小改动)。我遇到了另一个问题,NTCredentials不是线程安全的,这迫使我确保一次只有一个线程处于活动状态。我可能有一些片段可以很快在这里分享。这并不像我希望的那样方便,但我认为这就是设计。我已经在上发布了一个工作实现,供任何像我一样被困在上面的人使用。