メインコンテンツへスキップ
SDETRole
SDETRole

用語集 · UI 自動化

Selenium Grid

別名: Selenium Grid 4, セレニウムグリッド, Selenium グリッド

定義

WebDriver のセッションをリモートのブラウザーノードに振り分ける Selenium のサーバーで、多数のブラウザー・バージョン・マシンでテストを並列実行できます。

Selenium Grid を使うと、テストはブラウザーを別の場所に作成できます。テストは RemoteWebDriver を使って Grid の URL を指定します。Grid は条件に合うブラウザーを持つノード(たとえば Linux 上の Chrome)を見つけ、そこでセッションを開始し、すべてのコマンドを中継します。多数のノードが同時にセッションを処理できるため、Grid は Selenium のスイートを並列に、かつ複数ブラウザーで実行するための定番の方法です。

例

公式の Docker イメージで、単一マシンの Grid を起動します。

docker run -d -p 4444:4444 --shm-size="2g" selenium/standalone-chrome

次にテストから接続します(Selenium 4、Java 21)。

ChromeOptions options = new ChromeOptions();
WebDriver driver = new RemoteWebDriver(
    URI.create("http://localhost:4444").toURL(), options);

driver.get("https://example.com");

ブラウザーのオプションは、Grid がノードと照合する「ケイパビリティ(capabilities)」です。http://localhost:4444 の Grid UI では、ノード、スロット、実行中のセッションを確認できます。

構成(Grid 4)

Selenium Grid 4 は 3 つのモードで実行できます。

  • スタンドアロン(Standalone): すべてを 1 つのプロセスで動かします。ローカルでの利用や小規模な CI ジョブに適しています。
  • ハブとノード(Hub and node): 1 つのハブがセッションを受け付け、複数のノードがブラウザーを実行します。java -jar selenium-server-<version>.jar hub と ... node で起動します。
  • 完全分散(Fully distributed): ハブの内部コンポーネント(Router、Distributor、Session Map、New Session Queue、Event Bus)を別々のプロセスとして実行します。Kubernetes に適しています。

Grid 4 では古い /wd/hub パスも不要になりました(ただし引き続き受け付けます)。

よくある間違い

  • Grid がテストを並列化してくれると思い込む。 Grid が提供するのはブラウザーです。テストを並行実行するようにテストランナー(JUnit 5、TestNG)を設定する必要があり、テストは独立している必要があります。
  • スロット数よりスレッド数が多い。 余ったセッション要求はキューに入り、タイムアウトすることがあります。ランナーの並列数を利用可能なスロット数に合わせましょう。
  • ドライバーを終了しない。 driver.quit() を忘れると、セッションがタイムアウトするまでスロットを占有し続けます。
  • Docker の共有メモリが小さい。 コンテナのデフォルトの /dev/shm では Chrome がクラッシュします。そのため --shm-size フラグを指定します。

クラウドのホスティングサービスも Grid と同じ WebDriver エンドポイントを公開しているため、RemoteWebDriver のコードは同じです。変わるのは URL とケイパビリティだけです。

キーワードを入力すると SDETRole 全体を検索できます。

Pagefind による全文検索 · ブラウザ内で動作します 検索ページを開く →