Мы с вами постепенно создали проект, в котором можем запускать тесты. Сейчас мы делаем это на своём компьютере, но в будущем нам нужно будет интегрировать тесты в систему непрерывной интеграции и доставки (CI/CD).
Проблема заключается в том, что для некоторых тестов требуется открыть браузер, даже если он работает в безголовом режиме. В системе CI/CD браузера нет, поэтому мы можем создать контейнер в Docker с браузером и запускать тесты через него. Об этом и пойдёт речь в статьях.
За основу возьму проект, ссылка на который есть, в описании канала - https://github.com/Timurchik57/JAVA.git.
Запуск удалённого браузера
Мы с вами уже познакомились с Docker и умеем клонировать и создавать образы из прошлой статьи:
Поэтому давайте клонируем новым образ командой
docker pull selenium/standalone-chrome
Это официальный образ от селениума
Вы также можете загружать нужную версию браузера прописав соответствующий тег
docker pull selenium/standalone-chrome:114.0
После установки вам будет доступен нужный образ
Далее вам нужно запустить ваш образ, чтобы можно было использовать его в качестве браузера
docker run --rm -d -p 4445:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome
4445:4444 - это порты для подключения к браузеру. 4445 - это ваш порт, 4444 - порт браузера
Всё ваш браузер запущен!
Посмотреть его вы сможете по адресу - http://localhost:4445
Настройка проекта на запуск через Docker
Создав контейнер в Docker мы никак не затронули наши тесты, то есть теперь нужно настроить запуск через браузер в контейнере, а не через ваш ПК.
Инициализация драйвера
У каждого проекта есть инициализация ChromeDriver, вы должны немного изменить эту инициализацию.
В моём случае она выглядит так:
У меня есть абстрактный класс, от которого наследуются все тестовые классы. Значит, перед каждым тестом открывается браузер, и именно его мы будем настраивать.
Вам нужно заменить driver = new EventFiringWebDriver(new ChromeDriver(chromeOptions)); на driver = new RemoteWebDriver(new URL("http://localhost:4445/wd/hub"), chromeOptions);
Импортировать нужно:
- import org.openqa.selenium.remote.RemoteWebDriver;
- import java.net.URL;
Также меняем public static EventFiringWebDriver driver; на public static RemoteWebDriver driver;
Также наш класс Custom придётся пока забыть, ведь он наследуется от WebDriverEventListener. О нём я рассказывал в статье
Убираем данную строку
В итоге у вас получится следующее
Все изменения закомментировал, чтобы вы смогли явно увидеть до и после.
Заметьте, что URL я как раз указал тот, который мы создали для браузера - http://localhost:4445/wd/hub
Все изменения вы сможете взять, перейдя по ссылке на проект - https://github.com/Timurchik57/JAVA.git.
Замена инициализации PageObgect
Но у нас выводит ошибку. Это всё из за того, что наши классы из PageObgect инициализируется через EventFiringWebDriver, а не через RemoteWebDriver
Исправим это
Запуск тестов через контейнер Docker
Мы подправили наш проект под запуск через Docker, осталось только его запустить. Запустим тест, где мы точно знаем, что открывается браузер
Тесты прошли успешно
Сгенерируем отчёт и увидим, скриншот браузера
Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!