Selenium Grid (экспериментально)
Введение
Playwright может подключаться к Selenium Grid Hub, который запускает Selenium 4, чтобы запускать браузеры Google Chrome или Microsoft Edge, вместо запуска браузера на локальной машине. Обратите внимание, что эта функция является экспериментальной и приоритизируется соответственно.
Существует риск того, что интеграция Playwright с Selenium Grid Hub может перестать работать в будущем. Убедитесь, что вы взвесили риски и преимущества перед использованием. Внутренне Playwright подключается к браузеру, используя websocket Chrome DevTools Protocol. Selenium 4 в настоящее время предоставляет эту возможность. Однако, в будущем это может измениться. Если Selenium откажется от этой возможности, Playwright перестанет работать с ним.Подробнее
Перед подключением Playwright к вашему Selenium Grid, убедитесь, что grid работает с Selenium WebDriver. Например, запустите один из примеров и передайте переменную окружения SELENIUM_REMOTE_URL
. Если пример webdriver не работает, ищите ошибки в выводе вашего Selenium hub/node/standalone и ищите проблемы Selenium для возможного решения.
Запуск Selenium Grid
Если вы запускаете распределенный Selenium Grid, Playwright требует, чтобы узлы Selenium были зарегистрированы с доступным адресом, чтобы он мог подключаться к браузерам. Чтобы убедиться, что все работает как ожидается, установите переменную окружения SE_NODE_GRID_URL
, указывающую на hub при запуске узлов Selenium.
# Запуск узла selenium
SE_NODE_GRID_URL="http://<selenium-hub-ip>:4444" java -jar selenium-server-<version>.jar node
Подключение Playwright к Selenium Grid
Чтобы подключить Playwright к Selenium Grid 4, установите переменную окружения SELENIUM_REMOTE_URL
, указывающую на ваш Selenium Grid Hub. Обратите внимание, что это работает только для Google Chrome и Microsoft Edge.
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 pytest --browser chromium
Вам не нужно изменять ваш код, просто используйте ваш тестовый фреймворк или browser_type.launch() как обычно.
Передача дополнительных возможностей
Если ваш grid требует установки дополнительных возможностей (например, вы используете внешнюю службу), вы можете установить переменную окружения SELENIUM_REMOTE_CAPABILITIES
, чтобы предоставить сериализованные в JSON возможности.
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_CAPABILITIES="{'mygrid:options':{os:'windows',username:'John',password:'secure'}}" pytest --browser chromium
Передача дополнительных заголовков
Если ваш grid требует установки дополнительных заголовков (например, вы должны предоставить токен авторизации для использования браузеров в вашем облаке), вы можете установить переменную окружения SELENIUM_REMOTE_HEADERS
, чтобы предоставить сериализованные в JSON заголовки.
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_HEADERS="{'Authorization':'Basic b64enc'}" pytest --browser chromium
Подробные логи
Запустите с переменной окружения DEBUG=pw:browser*
, чтобы увидеть, как Playwright подключается к Selenium Grid.
DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444 pytest --browser chromium
Если вы создаете проблему, пожалуйста, включите этот лог.
Использование Selenium Docker
Один из простых способов использования Selenium Grid — это запуск официальных docker-контейнеров. Подробнее читайте в документации selenium docker images. Для соглашения о тегах изображений читайте больше.
Режим Standalone
Вот пример запуска selenium standalone и подключения Playwright к нему. Обратите внимание, что hub и node находятся на одном localhost
, и мы передаем переменную окружения SE_NODE_GRID_URL
, указывающую на него.
Сначала запустите Selenium.
docker run -d -p 4444:4444 --shm-size="2g" -e SE_NODE_GRID_URL="http://localhost:4444" selenium/standalone-chromium:latest
Затем запустите Playwright.
SELENIUM_REMOTE_URL=http://localhost:4444 pytest --browser chromium
Режим Hub и nodes
Вот пример запуска selenium hub и одного узла selenium, и подключения Playwright к hub. Обратите внимание, что hub и node имеют разные IP, и мы передаем переменную окружения SE_NODE_GRID_URL
, указывающую на hub при запуске контейнеров узлов.
Сначала запустите контейнер hub и один или несколько контейнеров узлов.
docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.25.0
docker run -d -p 5555:5555 \
--shm-size="2g" \
-e SE_EVENT_BUS_HOST=<selenium-hub-ip> \
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
-e SE_NODE_GRID_URL="http://<selenium-hub-ip>:4444"
selenium/node-chromium:4.25.0
Затем запустите Playwright.
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 pytest --browser chromium
Selenium 3
Внутренне Playwright подключается к браузеру, используя websocket Chrome DevTools Protocol. Selenium 4 предоставляет эту возможность, в то время как Selenium 3 — нет.
Это означает, что Selenium 3 поддерживается на основе лучших усилий, где Playwright пытается подключиться к узлу grid напрямую. Узлы grid должны быть непосредственно доступны с машины, на которой работает Playwright.