独自の Grid 3 のセットアップ

Grid 3 をセットアップするためのクイックスタートガイド。

Selenium Grid を使用するには、ノード用の独自のインフラストラクチャを維持する必要があります。これは面倒で時間のかかる作業になる可能性があるため、多くの組織は Amazon EC2 や Google Compute などの IaaS プロバイダーを利用してこのインフラストラクチャを提供しています。

その他のオプションとしては、クラウドで Selenium Grid をサービスとして提供している Sauce Labs や Testing Bot などのプロバイダーを利用することが挙げられます。また、独自のハードウェアでノードを実行することももちろん可能です。この章では、独自のノードインフラストラクチャを備えた独自の Grid を実行するという選択肢について詳しく説明します。

クイックスタート

この例では、Selenium 2 Grid Hub を起動し、WebDriver ノードと Selenium 1 RC レガシーノードの両方を登録する方法を示します。また、Java から Grid を呼び出す方法も示します。ここでは Hub とノードが同じマシン上で実行されている様子を示していますが、もちろん selenium-server-standalone を複数のマシンにコピーすることもできます。

selenium-server-standalone パッケージには、Grid を実行するために必要な Hub、WebDriver、およびレガシー RC が含まれており、*ant* はもう必要ありません。selenium-server-standalone.jarhttps://selenium.dokyumento.jp/downloads/ からダウンロードできます。

ステップ 1: Hub を起動する

Hub は、テスト要求を受信し、適切なノードに配布する中心点です。配布は capabilities ベースで行われます。つまり、capabilities のセットを必要とするテストは、そのセットまたはサブセットの capabilities を提供するノードにのみ配布されます。

テストで要求される capabilities は、名前が示すとおり *desired (要求されるもの)* に過ぎないため、Hub は要求された capabilities セットに完全に一致するノードを見つけることを保証できません。

コマンドプロンプトを開き、selenium-server-standalone.jar ファイルをコピーしたディレクトリに移動します。スタンドアロンサーバーに -role hub フラグを渡すことで Hub を起動します。

java -jar selenium-server-standalone.jar -role hub

Hub はデフォルトでポート 4444 をリッスンします。ブラウザウィンドウを開き、https://:4444/grid/console にアクセスすると、Hub のステータスを確認できます。

デフォルトポートを変更するには、コマンドを実行するときにリッスンするポートを表す整数を指定して、オプションの -port フラグを追加できます。また、JSON 設定ファイル (下記参照) に表示されている他のすべてのオプションは、コマンドラインフラグとして使用できます。

上記の簡単なコマンドだけでも十分ですが、より高度な設定が必要な場合は、便宜上、JSON 形式の設定ファイルを指定して、Hub の起動時に設定することもできます。次のようにして実行できます。

java -jar selenium-server-standalone.jar -role hub -hubConfig hubConfig.json -debug

以下に hubConfig.json ファイルの例を示します。ステップ 2 では、ノード設定ファイルを提供する方法について詳しく説明します。

{
  "_comment" : "Configuration for Hub - hubConfig.json",
  "host": ip,
  "maxSession": 5,
  "port": 4444,
  "cleanupCycle": 5000,
  "timeout": 300000,
  "newSessionWaitTimeout": -1,
  "servlets": [],
  "prioritizer": null,
  "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
  "throwOnCapabilityNotPresent": true,
  "nodePolling": 180000,
  "platform": "WINDOWS"}

ステップ 2: ノードを起動する

新しい WebDriver 機能を持つ Grid、Selenium 1 RC 機能を持つ Grid、またはその両方を同時に実行する場合でも、同じ selenium-server-standalone.jar ファイルを使用してノードを起動します。

java -jar selenium-server-standalone.jar -role node -hub https://:4444

-port フラグでポートが指定されていない場合、空いているポートが選択されます。1 台のマシンで複数のノードを実行できますが、その場合は、システムのメモリリソースと、テストでスクリーンショットを撮る場合のスクリーンショットの問題に注意する必要があります。

オプションを使用したノードの設定

前述のように、下位互換性のために、「wd」および「rc」ロールは依然として「node」ロールの有効なサブセットです。ただし、これらのロールはリモート接続のタイプを対応する API に制限しますが、「node」は RC と WebDriver の両方のリモート接続を許可します。

コマンドラインで JVM プロパティ ( -D フラグを *-jar 引数の前* に使用) も渡すと、これらが取得され、ノードに伝播されます。

-Dwebdriver.chrome.driver=chromedriver.exe

JSON を使用したノードの設定

JSON 設定ファイルで設定された Grid ノードを起動することもできます。

java -Dwebdriver.chrome.driver=chromedriver.exe -jar selenium-server-standalone.jar -role node -nodeConfig node1Config.json

こちらは nodeConfig.json ファイルの例です。

{
  "capabilities": [
    {
      "browserName": "firefox",
      "acceptSslCerts": true,
      "javascriptEnabled": true,
      "takesScreenshot": false,
      "firefox_profile": "",
      "browser-version": "27",
      "platform": "WINDOWS",
      "maxInstances": 5,
      "firefox_binary": "",
      "cleanSession": true
    },
    {
      "browserName": "chrome",
      "maxInstances": 5,
      "platform": "WINDOWS",
      "webdriver.chrome.driver": "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"
    },
    {
      "browserName": "internet explorer",
      "maxInstances": 1,
      "platform": "WINDOWS",
      "webdriver.ie.driver": "C:/Program Files (x86)/Internet Explorer/iexplore.exe"
    }
  ],
  "configuration": {
    "_comment" : "Configuration for Node",
    "cleanUpCycle": 2000,
    "timeout": 30000,
    "proxy": "org.openqa.grid.selenium.proxy.WebDriverRemoteProxy",
    "port": 5555,
    "host": ip,
    "register": true,
    "hubPort": 4444,
    "maxSession": 5
  }
}

-host フラグに関する注意点

Hub とノードの両方で、-host フラグが指定されていない場合、デフォルトで 0.0.0.0 が使用されます。これは、マシンのすべてのパブリック (非ループバック) IPv4 インターフェースにバインドされます。特別なネットワーク構成や、追加のネットワークインターフェースを作成するコンポーネントがある場合は、Hub/ノードが別のマシンから到達できるようにする値を -host フラグに設定することをお勧めします。

ポートの指定

Hub で使用されるデフォルトの TCP/IP ポートは 4444 です。ポートを変更する必要がある場合は、上記の構成を使用してください。

トラブルシューティング

ログファイルの使用

高度なトラブルシューティングのために、システムメッセージをログに記録するログファイルを指定できます。Selenium GRID Hub またはノードを -log 引数で起動します。以下の例を参照してください。

java -jar selenium-server-standalone.jar -role hub -log log.txt

問題が発生した場合は、お気に入りのテキストエディタを使用してログファイル (上記の例では log.txt) を開き、「ERROR」ログを見つけてください。

-debug 引数の使用

また、-debug 引数を使用して、デバッグログをコンソールに出力することもできます。Selenium Grid Hub またはノードを -debug 引数で起動します。以下の例を参照してください。

java -jar selenium-server-standalone.jar -role hub -debug

警告

Selenium Grid は、適切なファイアウォール許可を使用して外部アクセスから保護する必要があります。

Grid を保護しないと、次のいずれかまたは複数が起こる可能性があります。

  • Grid インフラストラクチャへのオープンアクセスを提供することになります。
  • サードパーティが内部 Web アプリケーションやファイルにアクセスできるようになります。
  • サードパーティがカスタムバイナリを実行できるようになります。

公開されている Grid がどのように悪用される可能性があるかについて概説している、Detectify のこちらのブログ記事を参照してください: Grid を公開したままにしないでください

Docker Selenium

Docker は、コンテナと呼ばれるユニットで Selenium Grid インフラストラクチャをプロビジョニングおよびスケーリングするための便利な方法を提供します。コンテナは、目的のアプリケーションを実行するために必要なすべて (すべての依存関係を含む) を、さまざまなマシン上で信頼性が高く再現可能な方法で含む、標準化されたソフトウェアユニットです。

Selenium プロジェクトは、Docker イメージのセットを管理しており、これをダウンロードして実行すると、すぐに動作する Grid を起動して実行できます。ノードは Firefox と Chrome の両方で利用できます。Grid をプロビジョニングする方法の詳細については、Docker Selenium リポジトリを参照してください。

前提条件

Grid を実行するための唯一の要件は、Docker がインストールされ、動作していることです。 Docker をインストールしてください

最終更新日: 2022年1月10日: More wiki (#907) [deploy site] (adcf706a1ad)