Перейти к основному содержимому

Selenium Grid (экспериментально)

Введение

Playwright может подключаться к Selenium Grid Hub, который запускает Selenium 4, чтобы запускать браузеры Google Chrome или Microsoft Edge, вместо запуска браузера на локальной машине. Обратите внимание, что эта функция является экспериментальной и приоритизируется соответственно.

warning

Существует риск того, что интеграция 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.