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 ハブ/ノード/スタンドアロン出力でエラーを探し、考えられる解決策について Selenium の issue を検索してください。
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 dotnet test
コードを変更する必要はありません。通常どおり、テストハーネスまたは BrowserType.LaunchAsync() を使用してください。
追加の Capabilities の受け渡し
グリッドで追加の Capabilities を設定する必要がある場合 (たとえば、外部サービスを使用する場合)、SELENIUM_REMOTE_CAPABILITIES
環境変数を設定して、JSON シリアライズされた Capabilities を提供できます。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_CAPABILITIES="{'mygrid:options':{os:'windows',username:'John',password:'secure'}}" dotnet test
追加のヘッダーの受け渡し
グリッドで追加のヘッダーを設定する必要がある場合 (たとえば、クラウドでブラウザを使用するために認証トークンを提供する必要がある場合)、SELENIUM_REMOTE_HEADERS
環境変数を設定して、JSON シリアライズされたヘッダーを提供できます。
SELENIUM_REMOTE_URL=http://<selenium-hub-ip>:4444 SELENIUM_REMOTE_HEADERS="{'Authorization':'Basic b64enc'}" dotnet test
詳細ログ
Playwright が Selenium Grid にどのように接続しているかを確認するには、DEBUG=pw:browser*
環境変数を使用して実行します。
DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444 dotnet test
Issue を提出する場合は、このログを含めてください。
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 dotnet 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 dotnet test
Selenium 3
内部的には、Playwright は Chrome DevTools Protocol websocket を使用してブラウザに接続します。Selenium 4 はこの機能を公開していますが、Selenium 3 は公開していません。
これは、Selenium 3 が最善の努力でサポートされていることを意味します。Playwright はグリッドノードに直接接続しようとします。グリッドノードは、Playwright を実行するマシンから直接アクセスできる必要があります。