2015-10-21 2 views
4

Я пытаюсь запустить тесты Selenium на нескольких удаленных службах автоматизации (Sauce Labs, Browserstack и т. Д.) И столкнуться с проблемами, поражающими их API через мой корпоративный брандмауэр.Использование Selenium RemoteWebDriver за корпоративным прокси (Java)

Только примечание, приложение, которое я пытаюсь проверить, это не за этим брандмауэром, он общедоступен.

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:[email protected]), caps); 

Проблема, кажется, сантехнический Селен интерпретирует пользователь: ключ в URL в качестве прокси-учетных данных, поэтому он никогда не покидает нашу сеть. Существуют ли какие-либо конкретные трюки для настройки этого? Кажется, он использует Apache HttpClient под капотом.

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

ответ

3

Проблема с кодом 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, проходящий в исполнителе команд.
+0

Thanks! Это то, что я сейчас ухожу. В итоге получается много пользовательского кода (полные копии двух их внутренних классов с небольшими изменениями). Я столкнулся с отдельной проблемой NTCredentials, которая не является потокобезопасной, заставляя меня следить за тем, чтобы только один поток был активным одновременно. У меня могут быть некоторые фрагменты, которые я могу поделиться здесь в ближайшее время. Это не так удобно, как я надеялся, но я думаю, что это дизайн. – Dan

+0

Вы получили эту работу? –

+1

Я опубликовал рабочую реализацию этого по адресу http://stackoverflow.com/questions/34846014/using-selenium-remotewebdriver-behind-corporate-proxy/34908953#34908953 для тех, кто застрял на нем, как и я. –

Смежные вопросы