Интересует кто как решал проблему с запуском ChromeDriver в зависимости от ОС. В моем случае это Windows и Mac. Мое окружение: Maven + Java + TestNG. На данный момент вижу 2 решения:
Создать отдельные профайлы в POM. Таким образом, можно создать 2 следующих профайла:
Добавить в, например, DriverFactory класс проверку на текущую ОС:
public static WebDriver initDriver(String browserName) {
WebDriver driver = null;
if (browserName.equals(CHROME)) {
if ((System.getProperty("os.name")).contains("mac")) {
System.setProperty("webdriver.chrome.driver", "/path/to/mac/chromedriver";
} else {
System.setProperty("webdriver.chrome.driver", "/path/to/win/chromedriver";
}
return driver;
}
Возможно есть более интересные варианты?
Или решение зависит от того, как планируется запускать тесты? Ведь в том же Jenkins переменные можно переопределять прямо в настройках job’ов. Тогда возможно и не стоит прописывать логику в коде.
В коде путь точно не надо хардкодить.
Я использую отдельный конфиг-файл для хранения настроек: путей до драйверов, до скриншотов, настройки таймаута и т.д.
Я использую .ini-файл (properties), но можно и другие форматы, как удобнее (xml, yaml, json, etc.)
Я делала раньше профилями, но когда это дело разрослось, поняла, что компактностью такой вариант не страдает. Теперь использую только переменную в помнике с дефолтным значением для окружения, на котором запускается чаще всего. А если требуется изменить, то кастомизирую уже в параметрах билда
На самом деле цель вопроса была поинтересоваться кто и как на разных проектах решает подобные проблемы. Я сам сейчас храню пути и другие настройки в *.properties файле. И, пожалуй, пока на этом варианте остановлюсь, добавив логику передачи пути на ChromeDriver в зависимости от платформы на которой проходят тесты.
А почему нельзя просто установить хромдрайвер на каждую ось и не прописать в PATH путь к исполняемому файлу?
У меня есть 4 машины на которых бегают тесты и это Mac Win7 Ubuntu Win8 везде просто установлен хромдрайвер и прописан в PATH, и везде запускается ок все.
Чем обусловлено написание штуки для автоматического разворачивания хромдрайвера на любой системе?
Я на своей рабочей тачке и не запускаю, у меня сервер на котором дженкинс, и еще 4 виртуалки где бегают тесты. Развернуть новую тачку с необходимым мне конфигом это пару минут c Chef.
А зачем запускать на условно любой? Не сочтите за придирку, просто приведите пример когда вдруг вам нужно запустить ваши тесты на абсолютно рандомной машине?
Например когда нужна абсолютная транспортабельность проекта. То есть склонировав репозиторий, грубо говоря, все что нужно сделать для прогона тестов — это нажать на старт. Кнечно, проекты с серьезным окружением и инфраструктурой вот так из коробки не развернешь, потому это скорее чаще встречается не в командной работе (на проекте), а в личных случаях.
вот @meeroslaph об этом и говорит.
Хороший проект с автотестами(это мое мнение) - это проект, которому нужен минимум для настройки. он сам по себе самодостаточнен. Если нужны какие-то настройки - это делается максимум каким-то скриптом.
То есть человек, впервые получивший проект может спокойно его настроить на любой своей машине.
А если нужно прописать пару переменных окружения или еще что-то - то это уже получается только усложнение
Рекоммендую, если тесты запускаются локально, использовать webdriver manager -> который автоматом хендлит такие проблемы и качает актуальную версию драйвера в зависимости от ОС.