Выполнение тестов Selenium в Chrome (безголовый режим) на размещенном агенте VSTS
Можно ли запускать тесты Selenium C# на размещенном агенте в сборке / выпуске Visual Studio Team Services с использованием драйвера Chrome в режиме без монитора?
Я видел противоречивую информацию, указывающую, что это возможно и не возможно в настоящее время. Эта идея озвучивания пользователя предполагает предварительную установку Chrome на размещенных агентах:
Текущая настройка
В рамках настройки моих тестов (в коде) я указываю, что я хочу, чтобы драйвер 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 требуется некоторое время, чтобы сделать поддержку последней версии доступной. Попробуйте различные комбинации в зависимости от среды вашего проекта.