java - 在企业代理后面使用 Selenium RemoteWebDriver (Java)

标签 java selenium firewall apache-httpclient-4.x

我正在尝试在一些远程自动化服务(Sauce Labs、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 中的 user:key 解释为代理凭据,因此它永远不会离开我们的网络。配置这个有什么具体的技巧吗?它似乎在后台使用 Apache HttpClient。

认为我们正在使用 NTLM 代理,它似乎使用基本身份验证。从这里可能是同一个问题:https://code.google.com/p/selenium/issues/detail?id=7286

最佳答案

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

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

  • 编写 org.openqa.selenium.remote.http.HttpClient.Factory 的自定义实现,其行为与 https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/remote/internal/ApacheHttpClient.java 中的类似,但允许您注入(inject) HttpClient 实例(或 HttpClientFactory 实例,如果您想对其进行子类化)。这是一个非常简单的界面和一个易于复制的实现,因此这应该很容易。
  • 创建一个 org.apache.http.impl.client.BasicCredentialsProvider 的实例,为不同的主机使用不同的凭据(参见 org.apache.http.auth.AuthScope详情)。
  • 使用 org.apache.http.impl.HttpClientBuilder 使用您的凭据提供程序构建客户端。
  • 构造一个 HttpCommandExecutor 的实例,传入您的自定义工厂实例并注入(inject)您的客户端。
  • 构造RemoteWebDriver实例,传入命令执行器。

关于java - 在企业代理后面使用 Selenium RemoteWebDriver (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263006/

相关文章:

java - 如何创建具有不同java类属性的对象

java - 使用 bacnet4j 发现不同网络中的 BACnet 设备

javascript - Selenium WebDriver findElements 返回对象

networking - 使用 SSH 隧道接受传入连接

java - 将对象添加到具有排除的数组

java - 用于编辑完整 SOAPMessage 的出站 SOAP 处理程序

python - 选择元素不从 .first_selected_option() 方法返回 webelement

c# - 系统.TypeLoadException : Method 'Dispose' in type 'OpenQA.Selenium.Appium.Service.AppiumCommandExecutor'

symfony - FOSUserBundle - 您必须在安全防火墙配置中激活注销

JavaMail - 设置端口、代理和防火墙