Selenium Grid (試験的機能)
はじめに
Playwright は、ローカルマシンでブラウザを実行する代わりに、Selenium 4 を実行する Selenium Grid Hub に接続して、Google Chrome または Microsoft Edge ブラウザを起動できます。この機能は試験的であり、それに応じて優先順位が付けられていることに注意してください。
Playwright と Selenium Grid Hub の統合が将来的に破損するリスクがあります。使用する前に、リスクと利点を比較検討してください。
詳細
内部的には、Playwright は Chrome DevTools Protocol websocket を使用してブラウザに接続します。Selenium 4 は現在この機能を公開しています。ただし、これは将来そうでない可能性があります。Selenium がこの機能を削除した場合、Playwright はそれと連携しなくなります。
Playwright を Selenium Grid に接続する前に、グリッドが Selenium WebDriver で動作することを確認してください。たとえば、例の 1 つを実行し、SELENIUM_REMOTE_URL
環境変数を渡します。webdriver の例が機能しない場合は、Selenium hub/node/standalone の出力でエラーを探し、考えられる解決策について Selenium issues を検索してください。
Selenium Grid の起動
分散 Selenium Grid を実行する場合、Playwright はブラウザに接続できるように、Selenium ノードがアクセス可能なアドレスに登録されている必要があります。期待どおりに動作するようにするには、Selenium ノードを実行するときに、ハブを指す SE_NODE_GRID_URL
環境変数を設定します。
# Start selenium node
SE_NODE_GRID_URL="http://<selenium-hub-ip>:4444" java -jar selenium-server-<version>.jar node
Playwright を Selenium Grid に接続する
Playwright を Selenium Grid 4 に接続するには、Selenium Grid Hub を指す SELENIUM_REMOTE_URL
環境変数を設定します。これは Google Chrome と Microsoft Edge でのみ機能することに注意してください。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 npx playwright test
コードを変更する必要はありません。通常どおり、テストハーネスまたは browserType.launch() を使用してください。
追加のcapabilitiesの引き渡し
グリッドが追加の capabilities の設定を必要とする場合 (たとえば、外部サービスを使用する場合)、JSON シリアライズされた capabilities を提供するために、SELENIUM_REMOTE_CAPABILITIES
環境変数を設定できます。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_CAPABILITIES="{'mygrid:options':{os:'windows',username:'John',password:'secure'}}" npx playwright test
追加のヘッダーの引き渡し
グリッドが追加のヘッダーの設定を必要とする場合 (たとえば、クラウドでブラウザを使用するために認証トークンを提供する必要がある場合)、JSON シリアライズされたヘッダーを提供するために、SELENIUM_REMOTE_HEADERS
環境変数を設定できます。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_HEADERS="{'Authorization':'Basic b64enc'}" npx playwright test
詳細ログ
Playwright が Selenium Grid にどのように接続しているかを確認するには、DEBUG=pw:browser*
環境変数を使用して実行します。
DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444 npx playwright test
問題を報告する場合は、このログを含めてください。
Selenium Docker の使用
Selenium Grid を使用する簡単な方法の 1 つは、公式の Docker コンテナを実行することです。詳細については、selenium docker images のドキュメントをお読みください。イメージのタグ付け規則については、詳細をお読みください。
スタンドアロンモード
これは、Selenium スタンドアロンを実行し、Playwright をそれに接続する例です。ハブとノードが同じ 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
ハブとノードモード
これは、Selenium ハブと単一の Selenium ノードを実行し、Playwright をハブに接続する例です。ハブとノードは異なる IP を持ち、ノードコンテナを起動するときにハブを指す SE_NODE_GRID_URL
環境変数を渡すことに注意してください。
最初にハブコンテナと 1 つ以上のノードコンテナを起動します。
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 は Chrome DevTools Protocol websocket を使用してブラウザに接続します。Selenium 4 はこの機能を公開していますが、Selenium 3 は公開していません。
これは、Selenium 3 がベストエフォート方式でサポートされており、Playwright がグリッドノードに直接接続しようとすることを意味します。グリッドノードは、Playwright を実行するマシンから直接アクセスできる必要があります。