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

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 dotnet test

Вам не нужно изменять ваш код, просто используйте ваш тестовый фреймворк или BrowserType.LaunchAsync() как обычно.

Передача дополнительных возможностей

Если ваш grid требует установки дополнительных возможностей (например, вы используете внешний сервис), вы можете установить переменную окружения SELENIUM_REMOTE_CAPABILITIES, чтобы предоставить сериализованные в JSON возможности.

SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_CAPABILITIES="{'mygrid:options':{os:'windows',username:'John',password:'secure'}}" dotnet test

Передача дополнительных заголовков

Если ваш grid требует установки дополнительных заголовков (например, вы должны предоставить токен авторизации для использования браузеров в вашем облаке), вы можете установить переменную окружения SELENIUM_REMOTE_HEADERS, чтобы предоставить сериализованные в JSON заголовки.

SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_HEADERS="{'Authorization':'Basic b64enc'}" dotnet test

Подробные логи

Запустите с переменной окружения DEBUG=pw:browser*, чтобы увидеть, как Playwright подключается к Selenium Grid.

DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444 dotnet 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 dotnet 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 dotnet test

Selenium 3

Внутренне Playwright подключается к браузеру, используя websocket Chrome DevTools Protocol. Selenium 4 предоставляет эту возможность, в то время как Selenium 3 — нет.

Это означает, что Selenium 3 поддерживается на основе лучших усилий, где Playwright пытается подключиться к узлу grid напрямую. Узлы grid должны быть непосредственно доступны с машины, на которой работает Playwright.