Использование 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
Передав команду исполнителю.