Использование Selenium RemoteWebDriver за корпоративным прокси (Java)

Я пытаюсь запустить тесты Selenium на нескольких удаленных службах автоматизации (Sauce Labs, Browserstack и т. Д.) И сталкиваюсь с проблемами, связанными с их 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-адрес как учетные данные прокси-сервера, поэтому он никогда не покидает нашу сеть. Есть ли какие-то конкретные приемы для настройки этого? Кажется, использовать Apache HttpClient под капотом.

Я думаю, что мы используем прокси NTLM, кажется, что он использует базовую аутентификацию. Это может быть та же проблема здесь: https://code.google.com/p/selenium/issues/detail?id=7286

1 ответ

Решение

Проблема с кодом Google, на которую вы ссылались, действительно является причиной. Обратите внимание, что проблема была решена, поэтому теперь вы можете внедрить собственную реализацию CommandExecutor при создании RemoteWebDriver.

В частности, вы, вероятно, сделали бы что-то вроде этого:

  • Написать собственную реализацию org.openqa.selenium.remote.http.HttpClient.Factory который ведет себя аналогично тому, который указан на https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/remote/internal/ApacheHttpClient.java, но позволяет ввести HttpClient экземпляр (или HttpClientFactory например, если вы хотите, чтобы подкласс этого). Это довольно простой интерфейс и простая реализация для копирования, так что это должно быть легко.
  • Создать экземпляр org.apache.http.impl.client.BasicCredentialsProvider с разными учетными данными для разных хостов (см. org.apache.http.auth.AuthScope для деталей).
  • использование org.apache.http.impl.HttpClientBuilder построить клиента с вашим поставщиком учетных данных.
  • Построить экземпляр HttpCommandExecutor, передавая экземпляр вашей фабрики и впрыскивая вашего клиента.
  • Построить экземпляр RemoteWebDriverПередав команду исполнителю.
Другие вопросы по тегам