メインコンテンツにスキップ

Selenium Grid (実験的)

はじめに

Playwrightは、Selenium 4 を実行しているSelenium Grid Hub に接続して、Google Chrome または Microsoft Edge ブラウザを起動できます。これは、ローカルマシンでブラウザを実行する代わりに利用できます。この機能は実験的であり、それに応じて優先されます。

警告

将来的にPlaywrightとSelenium Grid Hubの統合が機能しなくなるリスクがあります。使用する前に、リスクとメリットを比較検討してください。

詳細

内部的には、PlaywrightはChrome DevTools Protocol WebSocketを使用してブラウザに接続します。Selenium 4 は現在この機能を提供していますが、Selenium 3 は提供しません。しかし、これは将来的にそうではない可能性があります。もしSeleniumがこの機能を廃止した場合、Playwrightはそれと連携できなくなります。

PlaywrightをSelenium Gridに接続する前に、GridがSelenium WebDriverで動作することを確認してください。例えば、いずれかの例を実行し、SELENIUM_REMOTE_URL環境変数を渡してください。WebDriverの例が機能しない場合は、Seleniumハブ/ノード/スタンドアロンの出力でエラーを探し、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 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

詳細ログ

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

DEBUG=pw:browser* SELENIUM_REMOTE_URL=http://internal.grid:4444 pytest --browser chromium

問題を報告する場合は、このログを含めてください。

Selenium Dockerの使用

Selenium Gridを使用する簡単な方法の1つは、公式のDockerコンテナを実行することです。詳細については、Selenium Dockerイメージのドキュメントを参照してください。イメージのタグ付け規則については、こちらをお読みください。

スタンドアロンモード

Seleniumスタンドアロンを実行し、それにPlaywrightを接続する例を次に示します。ハブとノードが同じlocalhost上にあり、そこを指すSE_NODE_GRID_URL環境変数を渡していることに注意してください。

まずSeleniumを起動します。

docker run -d -p 4444:4444 --shm-size="2g" -e SE_NODE_GRID_URL="https://:4444" selenium/standalone-chromium:latest

次にPlaywrightを実行します。

SELENIUM_REMOTE_URL=https://:4444 pytest --browser chromium

ハブとノードモード

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 pytest --browser chromium

Selenium 3

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

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