Инструкция по Selenium Docker

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

В этой статье мы расскажем о том, как запускать Selenium-тесты в Docker и выполнять их в браузерах Chrome и Firefox. И мы, вероятно, также поймем, зачем запускать Selenium-тесты в Docker.

Предварительные условия

Есть несколько предварительных условий, о которых вы должны знать, прежде чем мы начнем.

Базовое знакомство с Docker: вы должны, по крайней мере, иметь высокоуровневое понимание концепций Docker.

Установленный Docker: у вас также должен быть установлен docker на вашем устройстве.

Базовый скрипт Selenium: вам также понадобится пример скрипта, который вы можете выполнить для запуска ваших тестов. Вы также можете использовать пример скрипта, который я создал на JavaScript.

Почему мы должны запускать Selenium-тесты в Docker?

Прежде чем запускать наши тесты в Docker, важно понять, какие проблемы может решить для нас Docker. 

Проблемы с созданием сессии

Если вы запускали свои тесты без Docker, то, возможно, уже сталкивались с подобной ошибкой -  session not created: This version of ChromeDriver only supports Chrome version 89

Эта ошибка возникает, когда версия драйвера ChromeDriver и версия локального браузера не совпадают. В моем случае версия браузера была v91, а версия ChromeDriver - v89. Теперь у меня есть 2 варианта развития событий -

  • если мне нужно запустить тесты в последней версии, то мне нужно обновить ChromeDriver до v91;

  • если мне нужно проводить тесты в более старой версии, то мне нужно обновить браузер Chrome до версии v89.

Это становится довольно распространенной проблемой при каждом несовпадении версий. Поэтому для решения этой проблемы мы можем использовать образы Docker, которые поставляются с определенным драйвером ChromeDriver, а также с установленным браузером, которые совместимы друг с другом. Несмотря на то, какая версия установлена на вашем локальном устройстве, вы можете продолжать выполнение тестов в Docker.

Поддержка нескольких версий

Еще одним преимуществом Docker является возможность установки нескольких версий Chrome, которые мы можем использовать для выполнения наших тестов. Например, у меня может быть Chrome v91, работающий на порту 4444, а также Chrome v81, работающий на порту 4446, и тесты будут выполняться на обоих.

Docker предоставляет вам гораздо больше гибкости в плане выбора различных браузеров, а также выбора версий браузеров без необходимости беспокоиться о какой-либо инфраструктурной настройке.

Локальный запуск образа Selenium Standalone Chrome Docker

Команда Selenium предоставила нам несколько образов, которые мы можем использовать для запуска наших тестов. В данном руководстве мы будем использовать следующий образ selenium/standalone-chrome

Выполните следующую команду в терминале, чтобы запустить образ -  docker run -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome:3.141.59-20210607

Давайте рассмотрим эту команду подробнее. 

  • флаг -d используется для запуска контейнера docker в отсоединенном режиме;

  • -p используется для передачи порта, первый порт 4444: - это порт локальной машины, а второй :4444 - это порт внутри контейнера docker - --shm-size=2g - это очень важный флаг, который нужно использовать, чтобы контейнер docker мог использовать память хоста selenium/standalone-chrome:3.141.59-20210607 - это тег образа, который мы используем.

Когда вы выполните эту команду, она извлечет указанный вами образ и запустит контейнер. Вы увидите, что контейнер запущен, выполнив команду docker ps

Далее вы увидите Selenium Standalone, запущенный на http://localhost:4444/.

Запуск тестов Selenium на Docker

Теперь, когда мы разобрались с частью Docker, пришло время задать нашим тестам порт 4444. Эта часть зависит от фреймворка/языка, который вы используете в скрипте Selenium. В моем случае мне пришлось сделать следующее обновление, чтобы указать моим тестам порт 4444. 

Давайте теперь запустим тесты за счет node test.js . Затем переходим в http://localhost:4444/wd/hub/static/resource/hub.html и увидим, что будет создан сеанс Chrome, запущенный внутри вашего контейнера Docker.

После завершения выполнения тестов сессия chrome будет автоматически удалена. 

Запуск тестов Selenium в Firefox внутри контейнера Docker

Запуск тестов в Firefox почти такой же, как и в Chrome, вам просто нужно будет запустить новый образ, и вы можете указать другой порт (необязательно) локально, чтобы он не конфликтовал с существующим запущенным портом. 

docker run -d -p 4445:4444 --shm-size 2g selenium/standalone-firefox:3.141.59-20210607

Примечание: порт внутри докер-контейнера может оставаться прежним, поскольку он не связан с вашим докер-образом Chrome. 

Вам также нужно будет внести изменения в свой код, чтобы направить тесты на Firefox и на новый порт.

Заключение

Мы использовали образы Selenium Standalone Docker для выполнения наших тестов внутри контейнеров Docker и запустили их в Firefox и Chrome. Мы также узнали, почему мы должны запускать наши тесты внутри контейнера Docker и какие преимущества мы получаем от этого.

В следующем уроке я покажу вам, как использовать VNC для просмотра тестов, запущенных внутри контейнера Docker. 

Перевод материала подготовлен в рамках курса "Java QA Engineer. Professional". Всех заинтересованных приглашаем на открытый урок, на котором познакомимся с фреймворком Selenide, узнаем, какие проблемы он решает и напишем простой тест с его использованием.

Источник: https://habr.com/ru/company/otus/blog/650477/


Интересные статьи

Интересные статьи

Хочу поделиться опытом автоматизации экспорта заказов из Aliexpress в несколько CRM. Приведенные примеры написаны на PHP, но библиотеки для работы с Aliexpress есть и для...
Перевод статьи подготовлен в преддверии старта курса «Web-разработчик на Python». Когда вы собираете Docker-образ вам могут понадобиться секреты, например, пароль к приватному репозиторию п...
Мы уже не раз рассказывали про свой GitOps-инструмент werf, а в этот раз хотели бы поделиться опытом сборки сайта с документацией самого проекта — werf.io (его русскоязычная версия — ru.werf.io)....
Принято считать, что персонализация в интернете это магия, которая создается сотнями серверов на основе БигДата и сложного семантического анализа контента.
Довольно часто владельцы сайтов просят поставить на свои проекты индикаторы курсов валют и их динамику. Можно воспользоваться готовыми информерами, но они не всегда позволяют должным образом настроить...