Selenium Grid (experimental)
Введение
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 npx playwright test
Вам не нужно изменять ваш код, просто используйте ваш тестовый фреймворк или browserType.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'}}" npx playwright test
Передача дополнительных заголовков
Если ваш grid требует установки дополнительных заголовков (например, вы должны предоставить токен авторизации для использования браузеров в вашем облаке), вы можете установить переменную окружения SELENIUM_REMOTE_HEADERS
, чтобы предоставить сериализованные в JSON заголовки.
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_HEADERS="{'Authorization':'Basic b64enc'}" npx playwright test
Подробные логи
Запустите с переменной окружения DEBUG=pw:browser*
, чтобы увидеть, как Playwright подключается к Selenium Grid.
DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444 npx playwright test
Если вы создаете проблему, пожалуйста, включите этот лог.
Использование 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 npx playwright test
Режим 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 npx playwright test
Selenium 3
Внутренне Playwright подключается к браузеру, используя websocket Chrome DevTools Protocol. Selenium 4 предоставляет эту возможность, в то время как Selenium 3 — нет.
Это означает, что Selenium 3 поддерживается на основе лучших усилий, где Playwright пытается подключиться к узлу grid напрямую. Узлы grid должны быть напрямую доступны с машины, на которой работает Playwright.