Вопрос или проблема
У меня есть образ docker, который используется для запуска тестов selenium. Проблема в том, что selenium постоянно загружает последнюю версию браузера (chrome) и драйвера (chromedriver), что приводит к большому объему трафика.
Я пытался скачать chrome и chromedriver, используя selenium-manager как из пакетов python, так и из java в моем Dockerfile. Хотя файлы загружаются, при запуске тестов они загружаются снова. Я также пытался установить следующие переменные окружения в моем Dockerfile:
```
ENV SE_OFFLINE=true
ENV SE_AVOID_BROWSER_DOWNLOAD=true
ENV SE_FORCE_BROWSER_DOWNLOAD=false
ENV SE_TTL=0
И, наконец, я попытался установить переменную окружения SE_MANAGER_PATH
и использовать setBinary в моем коде. Кажется, что браузер и драйвер все равно загружаются каждый раз, когда запускается набор тестов с использованием образа docker (в частности, экземпляра fargate).
Есть идеи, как это решить?
Ответ или решение
Для решения проблемы с повторной загрузкой браузера и драйвера в вашем Docker-образе, вы можете воспользоваться несколькими методами, чтобы избежать ненужного трафика. Вот подробная инструкция:
-
Использование локальных бинарников:
- Вместо того чтобы позволять Selenium загружать браузер и драйвер каждый раз, вы можете скачать необходимые бинарники (Chrome и Chromedriver) вручную и добавить их в ваш Docker-образ. Вы можете найти соответствующие версии здесь для Chrome и здесь для Chromedriver.
-
Добавление бинарников в Dockerfile:
- Сначала добавьте скачанные файлы в директорию вашего проекта и затем используйте следующую строку в вашем Dockerfile для копирования их в контейнер:
COPY path/to/local/chrome /usr/bin/chrome
COPY path/to/local/chromedriver /usr/bin/chromedriver
RUN chmod +x /usr/bin/chrome /usr/bin/chromedriver
- Убедитесь, что пути к файлам правильные и что они имеют соответствующие права на выполнение.
-
Настройка переменных окружения:
- Убедитесь, что вы установили все нужные переменные окружения в вашем Dockerfile:
ENV SE_OFFLINE=true
ENV SE_AVOID_BROWSER_DOWNLOAD=true
ENV SE_FORCE_BROWSER_DOWNLOAD=false
-
Настройка WebDriver:
- В вашем Java-коде настройте WebDriver, чтобы он указывал на локальные бинарники:
System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
ChromeOptions options = new ChromeOptions();
options.setBinary("/usr/bin/chrome"); // укажите путь для Chrome, если требуется
WebDriver driver = new ChromeDriver(options);
-
Кэширование:
- Также можно рассмотреть возможность использования Docker-кэширования. Убедитесь, что ваше состояние образа не изменяется, когда вы не вносите изменения в браузер или драйвер. Это может помочь сократить время сборки и сетевой трафик.
- Тестирование:
- После внесения всех изменений, протестируйте ваше приложение, чтобы убедиться, что браузер и драйвер больше не загружаются. Это позволит минимизировать трафик и ускорить запуск тестов.
Эти шаги должны помочь вам избежать повторной загрузки Chrome и Chromedriver при каждом запуске ваших тестов в Docker. Убедитесь, что используете совместимые версии браузера и драйвера для корректной работы.