![](https://habrastorage.org/getpro/habr/upload_files/d8c/d3a/43d/d8cd3a43d75b059f35476e9e27a44ae2.png)
В этой статье мы расскажем о том, как запускать 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
![](https://habrastorage.org/getpro/habr/upload_files/ca8/283/db6/ca8283db6087b2a97e004a41fff3db78.png)
Эта ошибка возникает, когда версия драйвера ChromeDriver и версия локального браузера не совпадают. В моем случае версия браузера была v91, а версия ChromeDriver - v89. Теперь у меня есть 2 варианта развития событий -
если мне нужно запустить тесты в последней версии, то мне нужно обновить ChromeDriver до v91;
если мне нужно проводить тесты в более старой версии, то мне нужно обновить браузер Chrome до версии v89.
Это становится довольно распространенной проблемой при каждом несовпадении версий. Поэтому для решения этой проблемы мы можем использовать образы Docker, которые поставляются с определенным драйвером ChromeDriver, а также с установленным браузером, которые совместимы друг с другом. Несмотря на то, какая версия установлена на вашем локальном устройстве, вы можете продолжать выполнение тестов в Docker.
Поддержка нескольких версий
Еще одним преимуществом Docker является возможность установки нескольких версий Chrome, которые мы можем использовать для выполнения наших тестов. Например, у меня может быть Chrome v91, работающий на порту 4444, а также Chrome v81, работающий на порту 4446, и тесты будут выполняться на обоих.
![](https://habrastorage.org/getpro/habr/upload_files/8eb/0f5/9a4/8eb0f59a40bbf156763cb5cc1243690e.png)
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
![](https://habrastorage.org/getpro/habr/upload_files/f3d/625/e9a/f3d625e9adbc02d7d91b405f279054cb.png)
Далее вы увидите Selenium Standalone, запущенный на http://localhost:4444/.
Запуск тестов Selenium на Docker
Теперь, когда мы разобрались с частью Docker, пришло время задать нашим тестам порт 4444. Эта часть зависит от фреймворка/языка, который вы используете в скрипте Selenium. В моем случае мне пришлось сделать следующее обновление, чтобы указать моим тестам порт 4444.
![](https://habrastorage.org/getpro/habr/upload_files/5e8/ffd/c93/5e8ffdc933196c29c948a94cc440d0f0.png)
Давайте теперь запустим тесты за счет node test.js
. Затем переходим в http://localhost:4444/wd/hub/static/resource/hub.html и увидим, что будет создан сеанс Chrome, запущенный внутри вашего контейнера Docker.
![](https://habrastorage.org/getpro/habr/upload_files/ea6/59f/2b7/ea659f2b7ef5af9bdf9982d06ecda5e4.png)
После завершения выполнения тестов сессия chrome будет автоматически удалена.
Запуск тестов Selenium в Firefox внутри контейнера Docker
Запуск тестов в Firefox почти такой же, как и в Chrome, вам просто нужно будет запустить новый образ, и вы можете указать другой порт (необязательно) локально, чтобы он не конфликтовал с существующим запущенным портом.
docker run -d -p 4445:4444 --shm-size 2g selenium/standalone-firefox:3.141.59-20210607
Примечание: порт внутри докер-контейнера может оставаться прежним, поскольку он не связан с вашим докер-образом Chrome.
Вам также нужно будет внести изменения в свой код, чтобы направить тесты на Firefox и на новый порт.
![](https://habrastorage.org/getpro/habr/upload_files/533/146/86d/53314686dab657df1af087063676225a.png)
Заключение
Мы использовали образы Selenium Standalone Docker для выполнения наших тестов внутри контейнеров Docker и запустили их в Firefox и Chrome. Мы также узнали, почему мы должны запускать наши тесты внутри контейнера Docker и какие преимущества мы получаем от этого.
В следующем уроке я покажу вам, как использовать VNC для просмотра тестов, запущенных внутри контейнера Docker.
Перевод материала подготовлен в рамках курса "Java QA Engineer. Professional". Всех заинтересованных приглашаем на открытый урок, на котором познакомимся с фреймворком Selenide, узнаем, какие проблемы он решает и напишем простой тест с его использованием.