Запуск сервера Selenium и ChromeDriver в качестве службы Windows

Для того чтобы мы могли проводить тестирование пользовательского интерфейса, поддерживаемое "лицом к лицу", мы используем Selenium и ChromeDriver для автоматизации загрузки/взаимодействия страниц в составе нашего пакета тестирования.

Это ведет себя так, как ожидалось, во время тестирования разработчика (на локальной машине разработчика), но мы пытаемся выполнить эти проверки как часть нашей непрерывной сборки интеграции.

Наш серверный сервер основан на NIX, и вся наша инфраструктура CI работает на этих машинах. Чтобы мы могли протестировать Chrome под Windows (наш механизм доставки), мы настроили селеновую сетку. Когда тесты CI запускаются, они обращаются к сетке, чтобы найти Windows node для запуска тестов.

У нас был рабочий стол Windows, предназначенный исключительно для запуска этого теста. Это содержит стандартную корпоративную сборку Windows 7. Этот компьютер будет периодически перезагружаться в соответствии с политикой обновления ИТ-отдела.

Чтобы убедиться, что сервер Selenium всегда запущен, мы добавили сервер Selenium (работающий в режиме "node" ) в качестве службы Windows. Сервер Selenium Server настроен на запуск ChromeDriver для вызова имитируемого взаимодействия с пользователем.

Однако при запуске тестов из CI они терпят неудачу из-за таймаута. Наша рабочая теория заключается в том, что системный пользователь, выполняющий службу, не может создавать интерактивные окна. Веб-поиск поднял ссылку на проблему "Сессия 0", но практически не содержит конструктивных советов о том, как двигаться вперед.

Запуск процесса Selenium Server вручную с интерактивного сеанса не является жизнеспособным решением, так как это приводит к хрупким испытаниям, которые выходят из строя из-за проблемы с инфраструктурой, а не к подлинной тестовой регрессии.


Как мы можем запустить экземпляр Selenium Server через службу Windows при перезагрузке системы, которая может запускать экземпляры Chrome?

Ответ 1

Это можно легко сделать с помощью NSSM. Установка служб выглядит так:

nssm install seleniumhub java -jar C:\selenium\selenium-server-standalone-2.45.0.jar -role hub -hubConfig C:\selenium\hub.json
nssm install seleniumnode java -jar C:\selenium\selenium-server-standalone-2.45.0.jar -role node -nodeConfig C:\selenium\node.json

Он предоставляет простой способ удаления службы при необходимости:

nssm remove seleniumnode confirm

Добавьте пункт назначения в nssm в свою переменную PATH и запустите с консоли как admin

Ответ 3

Вы не можете запускать Selenium Grid в качестве службы Windows с Windows Vista. Microsoft называет это "Session 0 Isolation". Вы можете сделать это в Windows 2000 или XP, но со времени выхода Vista Microsoft больше не позволит Grid взаимодействовать с рабочим столом (или любыми другими программами пользовательского интерфейса, если на то пошло). Независимо от того, что вы все еще видите флажок "взаимодействовать с рабочим столом", это красная селедка. Таким образом, вы ДОЛЖНЫ запускать селенную сетку на переднем плане на этом сервере, чтобы получить доступ к сеансу. Если он работает под управлением Windows Server, теоретически вы можете иметь несколько сеансов и оставлять Grid на переднем плане на одном из ненулевых пользовательских сеансов.

Ответ 4

Мое предпочтительное решение этой проблемы (и мой выбор по умолчанию для запуска Selenium Grid в качестве сервиса) - использовать простой инструмент AlwaysUp. У этого есть бесплатная 30-дневная пробная версия, чтобы испытать это.

Что делать:

Таким образом, node будет работать как служба, выжить и перезагрузить компьютер с последней версией Chrome.

Если учетная запись пользователя, которую вы используете для входа в систему, отличается от учетной записи пользователя, которую вы указываете для запуска node в качестве службы, вы не увидите, что браузеры появляются на рабочем столе, поскольку они работают в другом пользовательский сеанс. Конечным результатом является то, что он почти идентичен запуску как обычная служба, но обходит проблему Session 0.

Ответ 5

Да, вы должны использовать NSSM. Важно отметить, что вы добавляете свою учетную запись Windows на вкладку "Вход" или любую другую действительную учетную запись. Если вы запустите свой node с опцией "Локальная системная учетная запись", вы получите проблему с сеансом 0. При обычном пользовательском сеансе узлы работают плавно невидимыми в фоновом режиме:)