メインコンテンツへ移動

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 は Selenium Grid と連携できなくなります。

Playwright を Selenium Grid に接続する前に、Grid が Selenium WebDriver で動作することを確認してください。たとえば、いずれかの例を実行し、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 mvn test

コードを変更する必要はありません。通常どおり、テストハーネスまたは BrowserType.launch() を使用してください。

追加の Capability の設定

Grid で追加の Capability を設定する必要がある場合(たとえば、外部サービスを使用する場合)、JSON シリアライズされた Capability を提供するために SELENIUM_REMOTE_CAPABILITIES 環境変数を設定できます。

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

追加のヘッダーの設定

Grid で追加のヘッダーを設定する必要がある場合(たとえば、クラウドでブラウザを使用するために認証トークンを提供する必要がある場合)、JSON シリアライズされたヘッダーを提供するために SELENIUM_REMOTE_HEADERS 環境変数を設定できます。

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

詳細ログ

Playwright が Selenium Grid にどのように接続しているかを確認するには、DEBUG=pw:browser* 環境変数を設定して実行してください。

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

Selenium 3

内部的には、Playwright は Chrome DevTools Protocol websocket を使用してブラウザに接続します。Selenium 4 はこの機能を公開していますが、Selenium 3 は公開していません。

これは、Selenium 3 がベストエフォート方式でサポートされていることを意味し、Playwright はグリッドノードに直接接続しようとします。グリッドノードは、Playwright を実行しているマシンから直接アクセスできる必要があります。