[Заметка] Headless Selenium WebDriver под Windows (desktop_utils)

vnc
windows
webdriver
Теги: #<Tag:0x00007fedb8372b18> #<Tag:0x00007fedb83724d8> #<Tag:0x00007fedb8372280>

(Дмитрий Жарий) #1

Привет коллеги,

Когда-то очень давно, я поднимал тему запуска “безголовых” тестов на WebDriver под Windows и к сожалению, тогда не удалось добиться стабильной работы.
Напомню, что мне очень хотелось:

  • Запускать тесты на удаленной Windows-машине без активной сессии
  • Remote Desktop Без установки UltraVNC (так как он уж очень
    небезопасный) или аналогов
  • Блокировка экрана пользовательской сессии Windows не должна влиять на
    прогон тестов

Решений, которое я предлагаю – экспериментальное. И я прошу Сообщество Автоматизаторов помочь в эксперименте – попробовать у себя на машине.

Утилита desktop_utils.exe, которую можно скачать отсюда:
kybu / headless-selenium-for-win :arrow_right: releases
позволяет запускать приложения на самом настоящем виртуальном рабочем столе.

Скачайте эту утилиту, и поместите в одну папку вместе с:

  • desktop_utils.exe
  • chromedriver.exe
  • IEDriverServer.exe
  • selenium-server-standalone-2.44.0.jar

Создайте bat-файл запуска селениум сервера run-webdriver.bat:

@set IE=-Dwebdriver.ie.driver="%cd%\IEDriverServer.exe"
@set CHROME=-Dwebdriver.chrome.driver="%cd%\chromedriver.exe"
@set PHANTOM=-Dphantomjs.binary.path="%cd%\phantomjs.exe"

@set SELENIUM_SERVER_EXE=selenium-server-standalone-2.44.0.jar

start "%SELENIUM_SERVER_EXE%" java %PHANTOM% %CHROME% %IE% -jar %SELENIUM_SERVER_EXE%

Запустите run-webdriver.bat для проверки, и попробуйте, работает ли Селениум сервер в браузере

http://localhost:4444/wd/hub/

Закройте Селениум сервер

Создайте файл run-headless.bat:

desktop_utils.exe --run run-webdriver.bat

И запустите.

У меня получилось вполне успешно запустить простые тесты на Google Chrome. C IE были проблемы, но и запускал я тесты на свежем Windows Server 2012 с нетронутыми политиками безопасности.

Попробуйте запустить такой безголовый вебдрайвер у себя, и расскажите что получилось!


Как запускать тесты, чтобы firefox оставался на заднем плане
(Александр Шиповалов) #2

Интересно было бы попробовать. Как раз сейчас решаю подобную проблему, только у меня она исключительно связана с IE. Я вижу, что в релизе появилась утилита headless_ie_selenium.exe. Можно хотя бы в двух словах описать ее использование?


(Дмитрий Жарий) #3

У автора есть пример на Руби:

В других языках принцип тот же – подменить путь к IE на утилиту.

Только, я стартую Selenium как отдельный Remote Server (и на локальной машине тоже), в таком случае, подход работает для всех браузеров, посредством стандартного подключения через RemoteDriver


(Andrew Legionov) #4

Уже неделю в качестве эксперимента использую данный метод для прогона тестов на билд сервере в Хроме - всё работает.


(Дмитрий Жарий) #5

Я уже пару месяцев гоняю тесты также на Хроме в headless режиме.
К сожалению, ничего не скажу про IE. Сам WebDriver в IE для части нашего дашборда (встроенный Tableau) вызывает ошибки и в нормальном режиме.


(Andrew Legionov) #6

У меня возникла только одна проблема - Autoit скрипты не работают в таком режиме.
И скорее всего возникнет вторая - в других тестах которые не используют данный метод используется пользователь из AD, но TFS запускает тесты не от обычного пользователя. Подумываю перейти на microsoft way: build-deploy-test workflow с использованием агента и контроллера и запуском тестов в активной desktop сессии.


(Elena Zhovnir) #7

а может кто сталкивался с таким, при подмене файла на headless_ie_selenium.exe выдает ошибку

"WebDriverException: Message: Unexpected error launching Internet Explorer. IELaunchURL() returned HRESULT 80070012 (‘There are no more files.’) for URL ‘http://localhost:52394/’"

Запускаю тест через Selenoid server

Пример кода
"

capabilities = DesiredCapabilities.INTERNETEXPLORER
capabilities["InternetExplorerDriver.FORCE_CREATE_PROCESS_API"]= True
capabilities["InternetExplorerDriver.BROWSER_COMMMAND_LINE_SWITCHES"]= "-private"
capabilities ["InternetExplorerDriver.ENSURE_CLEAN_SESSION"]= True
capabilities ["InternetExplorerDriver.USE_PER_PROCESS_PROXY"]= True

remote_server = "http://127.0.0.1:4444/wd/hub"
driver = webdriver.Remote(remote_server,desired_capabilities=capabilities)
driver.get('http://www.google.com')"

Pytest -3.0.7
Selenium WebDriver - 3.4.2
IEWebDriver -3.4.0.0
Browser IE 11.64.162990
Selenoid - V.1.3.9

IEDriverServer выполняеться без проблем.