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で動作することを確認してください。例えば、いずれかの例を実行し、SELENIUM_REMOTE_URL
環境変数を渡します。WebDriverの例が動作しない場合は、Seleniumハブ/ノード/スタンドアロンの出力でエラーを探し、考えられる解決策についてSeleniumの課題を検索してください。
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()を使用してください。
追加の機能の受け渡し
グリッドが追加の機能を設定する必要がある場合(例えば、外部サービスを使用している場合)、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
追加ヘッダーの受け渡し
グリッドが追加のヘッダーを設定する必要がある場合(例えば、クラウドでブラウザを使用するために認証トークンを提供する必要がある場合)、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を使用する簡単な方法の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 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を実行するマシンから直接アクセス可能である必要があります。