Взлом
Вместо ручной установки браузера, я бы рекомендовал использовать уже имеющиеся изображения, такие как https://github.com/SeleniumHQ/docker-selenium.
Решение (рекомендуется)
С архитектурной точки зрения каждый Docker контейнер должен иметь только одну цель. В вашем случае контейнер отвечает за запуск браузера и тестов. Вот почему я предлагаю разделить решение на два контейнера:
- первый контейнер с файлами
selenium-side-runner
и .side
, которые будут запускать тесты - , второй контейнер запускает браузер
Исходя из документы , selenium-side-runner
могут работать с сеткой селена.
Итак, решение будет выглядеть как
- Подготовьте
Dockerfile
, который установит selenium-side-runner
, добавит .side
файлов и настроит ENTRYPOINT
. Здесь вы также можете установить URL по умолчанию для Selenium Grid, например selenium-side-runner -w 10 --server http://selenium-browsers:4444/wd/hub
, где selenium-browsers
будет именем контейнера с браузером или Selenium Grid. - Создайте свой собственный Docker image
- Создание Docker сети с
docker network create selenium-tests
- Запуск браузера или Selenium Grid
- Вариант 1: браузер.
docker run -id --shm-size=2g --network selenium-tests --name selenium-browsers selenium/standalone-chrome:3.141.59-2020040
на основе SeleniumHQ / docker -селен - Вариант 2: Selenium Grid. SeleniumHQ / docker -селен содержит инструкции, как это сделать. Кроме того, вы можете посмотреть Zalenium или Selenoid , которые предоставляют дополнительные функции, такие как видеозапись, предварительный просмотр теста и т. Д. c.
- Запустите ваш контейнер с
docker run -it --network selenium-tests --name my-tests <your custom image>
Поскольку оба контейнера находятся в одной пользовательской сети selenium-tests
, оба контейнера могут связываться через имена контейнеров. Таким образом, контейнер my-tests
может отправлять запросы в контейнер selenium-browsers
(см. Параметр # 1 и --server
).
При необходимости вы можете создать docker -compose.yaml файл позже, чтобы упростить использование решения.