Выполнение тестов Selenium в Chrome (безголовый режим) на размещенном агенте VSTS

Можно ли запускать тесты Selenium C# на размещенном агенте в сборке / выпуске Visual Studio Team Services с использованием драйвера Chrome в режиме без монитора?

Я видел противоречивую информацию, указывающую, что это возможно и не возможно в настоящее время. Эта идея озвучивания пользователя предполагает предварительную установку Chrome на размещенных агентах:

https://visualstudio.uservoice.com/forums/330519-visual-studio-team-services/suggestions/19387174-install-headless-chrome-on-hosted-build-servers

Текущая настройка

В рамках настройки моих тестов (в коде) я указываю, что я хочу, чтобы драйвер Chrome работал в автономном режиме, и это происходит при запуске в локальном экземпляре VS.

Пример:

var options = new ChromeOptions();
options.AddArgument("headless");
options.AddArgument("disable-gpu");

var driver = new ChromeDriver(options);

Когда тесты выполняются как часть определения выпуска в VSTS, выдается следующая ошибка:

2018-02-20T13:21:10.7954002Z Error Message:
2018-02-20T13:21:10.7954156Z  unknown error: cannot find Chrome binary
2018-02-20T13:21:10.7954340Z   (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.14393 x86_64)
2018-02-20T13:21:10.7954487Z Stack Trace:
2018-02-20T13:21:10.7954620Z System.InvalidOperationException: unknown error: cannot find Chrome binary
2018-02-20T13:21:10.7955947Z   (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.14393 x86_64)
2018-02-20T13:21:10.7956136Z    at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
2018-02-20T13:21:10.7956387Z    at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
2018-02-20T13:21:10.7956557Z    at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
2018-02-20T13:21:10.7956729Z    at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
2018-02-20T13:21:10.7956927Z    at OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeDriverService service, ChromeOptions options, TimeSpan commandTimeout)
2018-02-20T13:21:10.7957106Z    at OpenQA.Selenium.Chrome.ChromeDriver..ctor(String chromeDriverDirectory, ChromeOptions options)

Я убедился, что chromedriver.exe скопирован в каталог bin и включен в артефакты сборки, которые используются в процессе выпуска.

альтернативы

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

Мне также удалось успешно запустить тесты с использованием драйвера PhantomJS в VSTS, но, опять же, мы хотим иметь возможность проводить тестирование исключительно с браузером Chrome, если это возможно.

ОБНОВИТЬ

В соответствии с принятым ответом ниже (Бернардом Вандером Бекеном) мне удалось решить эту проблему, вставив дополнительную задачу по выпуску для установки Chrome в автоматическом режиме и в автоматическом режиме с помощью сценария PowerShell. Эта задача (очевидно) должна быть выполнена до запуска теста, чтобы браузер можно было использовать в автономном режиме в тестах Selenium.

Пример определения выпуска

1 ответ

Решение

Это должно быть возможно, см. https://github.com/Microsoft/vsts-agent/issues/1378

Размещенный агент работает от имени администратора, поэтому вы можете установить chrome как часть вашей сборки, если chrome имеет режим автоматической установки.

В более поздних размещенных агентах VS, например Hosted VS2017, веб-браузеры и даже драйверы Selenium уже установлены. Вы можете следить за документацией для размещенных агентов в репозитории Gipub Image Generation Image. Например, вот ссылка на Chrome, присутствующий в агенте VS2017.

Нажмите на Agent Phase Название в верхней части вашего конвейера. Тогда под Agent pool Выбрать Hosted VS2017 а не ваниль Hosted бассейн. (Windows 2019 with VS 2019 Также недавно стало доступно).

У меня была такая же проблема. Эта проблема в основном связана с совместимостью версий, я пробовал несколько комбинаций и заставил их работать. Раньше я использовал последнюю версиюChromeDriver т.е. 76.*.*.* но это не поддерживается ни одним из Hosted Agent (На дату написания этого ответа) я использовал Win 1803. Позже я изменил свойChromeDriver Версия для 72.*.*.* а также Hosted Agent к VS2017-Win2016и теперь он работает нормально. Он также работает сWindows2019.

Итак, вывод: DevOps требуется некоторое время, чтобы сделать поддержку последней версии доступной. Попробуйте различные комбинации в зависимости от среды вашего проекта.