Ранее мы рассмотрели различные способы запуска тестов в разных браузерах. В предыдущей статье мы научились запускать тесты в контейнере Docker. Сегодня я расскажу вам о ещё более удобном способе запуска тестов в различных браузерах.
Так как способ будет связан с контейнерами в Docker, советую ознакомиться с подборкой статьей по самому Docker, с 0 рассказываю что это, и как им пользоваться.
Простой пример
Давайте начнём с рассмотрения отдельного класса, чтобы понять, как работает этот метод. Идея заключается в том, что мы инициализируем наши тесты с помощью специального инструмента WebDriverManager.
Это библиотека, которая позволяет автоматически выбирать версию браузера. Возможно, вы забыли об этом, поэтому вот статья, которая поможет вам вспомнить:
Так вот у этой библиотеки очень много возможностей. Одна из которых инициализировать ваши тесты в отдельном контейнере, с нужным браузером.
То есть вам не нужно будет:
- Скачивать самому нужный образ в Docker
- Запускать контейнер от данного образа
- Указывать доп настройки для вашего кода
Всё максимально просто. Для начала запустим наш Docker. У нас сейчас нет ни образов, ни контейнеров.
Создадим отдельный класс, и пропишем следующий код
WebDriver driver;
WebDriverManager wdm = WebDriverManager.chromedriver().browserInDocker();
Мы создали драйвер. Раньше мы указывали создание нашего браузера:
WebDriverManager.chromedriver().setup();
chromeOptions = new ChromeOptions();
chromeOptions.setHeadless(true);
chromeOptions.addArguments("window-size=1920, 1080");
driver = new RemoteWebDriver(new URL(remote_url_chrome), chromeOptions);
driver.setFileDetector(new LocalFileDetector());
Таким образом наш класс будет выглядеть следующим образом.
@BeforeEach - перед тестами создаём наш браузер в Docker.
@AfterEach - после теста закрываем наш браузер с контейнером.
@Test - в самом тесте открываем любую ссылку в браузере.
Первый запуск этого теста займёт довольно много времени. Это связано с тем, что в процессе будут автоматически установлены необходимые образы в Docker и запущен контейнер. Фактически это время уходит на загрузку и установку данных. В последующие разы запуск будет происходить быстрее.
Как вы заметили я вообще ничего не указывал. Ни адрес, ни порт. Я просто нажал на запуск и тесты прошли. Не магия ли?
Внедрение способа в наш проект
В прошлой статье наш запуск через контейнер в докере выглядел следующим образом.
Давайте для начала изменим его под запуск в 1 контейнере с браузером Chrome, а после добавим другой браузер.
Теперь, чтобы запустить тесты через контейнер, нам не нужно указывать адрес и порт этого контейнера вручную. Всё происходит автоматически. Просто переходим к тестам и запускаем любой из них.
В классах PageObject указываем WebDriver driver.
public IDEA(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
Заместо
public IDEA(WebDriver driver) {
this.driver = (EventFiringWebDriver) driver;
PageFactory.initElements(driver, this);
}
Это классы в которых скрыта логика всех локаторов страницы. Об этом рассказывал а статье ранее.
После этого можем посмотреть отчёт и увидим, что у нас в контейнере прошёл тест и сделал скриншот.
Добавим небольшую настройку, чтобы экран при запуске не был таким маленьким
И всё, мы научились запускать наши тесты, в контейнере докера, но только через один браузер, как же запустить другой?
Кроссбраузерность в WebDriverManager
Вот список браузеров, которые поддерживает WebDriverManager
WebDriverManager.chromedriver().setup();
WebDriverManager.firefoxdriver().setup();
WebDriverManager.edgedriver().setup();
WebDriverManager.operadriver().setup();
WebDriverManager.chromiumdriver().setup()
WebDriverManager.iedriver().setup();
Поэтому добавить поддержку другого браузера не составит труда. Мы просто укажем параметр, и при запуске наших тестов сможем указать нужное название браузера. После этого тесты откроются в нужном браузере прямо в контейнере. Не нужно указывать другой порт или что-то ещё.
Сама строка запуска выглядит следующим образом
mvn clean test -Dtest="JAVATest#Attribute" -Dbrowser="FireFox"
Здесь всё также, перед первым запуском теста, к вам установится образ докера с нужным браузером. После запуск будет быстрым.
Вот он второй образ
Как можем заметить, первый запуск у меня прошёл за 43 секунды, у меня достаточно быстрый интернет, так что скачалось быстро.
Весь код описанный в статье вы сможете найти в открытом доступе на GitHub. Выгружаю все изменения. Данный код вынес в отдельную ветку - RemoteWebDriverDocker, чтобы вы смогли использовать его без изменений других уроков.
Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!