Для того чтобы мы могли проводить тестирование пользовательского интерфейса, поддерживаемое "лицом к лицу", мы используем 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?