これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.
Selenium 3
- 1: Grid 3
- 2: 独自のグリッドを設定する
- 3: グリッドのコンポーネント
1 - Grid 3
Selenium Grid は、SeleniumテストがコマンドをリモートWebブラウザーインスタンスにルーティングできるようにする賢いプロキシサーバーです。 その目的は、複数のマシンで並行してテストを実行する簡単な方法を提供することです。
Selenium Gridでは、1つのサーバーが、JSON形式のテストコマンドを1つ以上の登録済みのグリッドノードにルーティングするハブとして機能します。 テストはハブに接続して、リモートブラウザーインスタンスへのアクセスを取得します。 ハブには、アクセスを提供する登録済みサーバーのリストがあり、これらのインスタンスを制御できます。
Selenium Gridを使用すると、複数のマシンで並行してテストを実行し、さまざまなブラウザーバージョンとブラウザー構成を(個々のテストではなく)一元的に管理できます。
Selenium Gridは特効薬ではありません。 一般的な委譲および配布の問題のサブセットを解決しますが、たとえばインフラストラクチャを管理せず、特定のニーズに適さない場合があります。
2 - 独自のグリッドを設定する
Selenium Gridを使用するには、ノード用の独自のインフラストラクチャを維持する必要があります。 これは面倒で時間のかかる作業になる可能性があるため、多くの組織はこのインフラストラクチャを提供するためにAmazon EC2やGoogle ComputeなどのIaaSプロバイダーを使用しています。
他の選択肢として、クラウドのサービスとしてSelenium Gridを提供するSauce LabsやTesting Botなどのプロバイダーの使うこともできます。 独自のハードウェアでノードを実行することも確かに可能です。 この章では、独自のノードインフラストラクチャを備えた独自のグリッドを実行するオプションについて詳しく説明します。
クイックスタート
この例では、Selenium 2グリッドハブを起動し、WebDriverノードとSelenium 1 RCレガシーノードの両方を登録する方法を示します。 また、Javaからグリッドを呼び出す方法も示します。 ここでは、ハブとノードが同じマシンで実行されていますが、もちろん、selenium-server-standaloneを複数のマシンにコピーできます。
selenium-server-standalone
パッケージには、グリッドの実行に必要なハブ、WebDriver、およびレガシーRCが含まれています。 ant はもう必要ありません。
selenium-server-standalone.jar
は https://selenium.dev/downloads/ からダウンロードできます。
ステップ1:ハブを開始する
ハブは、テストリクエストを受信し、それらを適切なノードに配布する中心点です。 配布は機能ベースで行われます。 つまり、一連の機能を必要とするテストは、その機能セットまたは機能のサブセットを提供するノードにのみ配布されます。
テストのDesiredCapabilitiesは、 任意の を意味するため、ハブはDesiredCapabilitiesの設定に完全に一致するノードを見つけることを保証できません。
コマンドプロンプトを開き、selenium-server-standalone.jar
ファイルをコピーしたディレクトリに移動します。 ハブを起動するには、-role hub
フラグをスタンドアロンサーバーに渡します。
java -jar selenium-server-standalone.jar -role hub
ハブはデフォルトでポート4444をリッスンします。 ブラウザーウィンドウを開いて http://localhost:4444/grid/console に移動すると、ハブのステータスを表示できます。
デフォルトのポートを変更するには、コマンドを実行するときにリッスンするポートを表す整数を持つオプションの -port
フラグを追加できます。
また、JSON構成ファイル(以下を参照)に表示される他のすべてのオプションは、可能なコマンドラインフラグです。
確かに上記の簡単なコマンドだけでうまくいくことができますが、より高度な構成が必要な場合は、JSON形式の構成ファイルを指定して、開始時にハブを構成することもできます。 JSON形式の構成ファイルを指定して開始時にハブを構成する方法は以下のとおりです。
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機能を備えたグリッドを実行するか、Selenium 1 RC機能を備えたグリッドを実行するか、または両方を同時に実行するかに関係なく、同じ selenium-server-standalone.jar
ファイルを使用してノードを起動します。
java -jar selenium-server-standalone.jar -role node -hub http://localhost:4444
-port
フラグでポートが指定されていない場合、空いているポートが選択されます。
1台のマシンで複数のノードを実行できますが、実行する場合は、システムメモリリソースとスクリーンショットの問題をテストで確認する必要があることに注意する必要があります。
オプションを使用したノード構成
前述のように、下位互換性のために、“wd"および"rc"ロールは"node"ロールの有効なサブセットのままです。 ただし、これらのロールは、対応するAPIへのリモート接続の種類を制限し、“node"はRCとWebDriverの両方のリモート接続を許可します。
コマンドラインでもJVMプロパティを( -jar引数の前に -D
フラグを使用して)渡すと、これらが取得され、ノードに伝播されます。
-Dwebdriver.chrome.driver=chromedriver.exe
JSONを使用したノード構成
JSON設定ファイルで構成されたグリッドノードを起動することもできます。
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
フラグに関する注意
ハブとノードの両方で、-host
フラグが指定されていない場合、デフォルトで0.0.0.0
を使用します。
これにより、マシンのすべてのパブリック(非ループバック)IPv4インターフェイスにバインドされます。
特別なネットワーク構成または追加のネットワークインターフェイスを作成するコンポーネントがある場合は、-host
フラグにハブ/ノードが別のマシンから到達できる値を設定することをお勧めします。
ポートを指定する
ハブで使用されるデフォルトのTCP / IPポートは4444です。 ポートを変更する必要がある場合は、上記の構成を使用してください。
トラブルシューティング
ログファイルを使用する
高度なトラブルシューティングのために、システムメッセージを記録するログファイルを指定できます。 -log引数を使用してSelenium GRIDハブまたはノードを起動します。 以下の例をご覧ください。
java -jar selenium-server-standalone.jar -role hub -log log.txt
お気に入りのテキストエディターを使用してログファイル(上記の例ではlog.txt)を開き、問題が発生した場合に"エラー"ログを見つけます。
-debug
引数を使用する
-debug引数を使用して、デバッグログをコンソールに出力することもできます。
-debug
引数を使用してSeleniumグリッドハブまたはノードを起動します。
以下の例をご覧ください。
java -jar selenium-server-standalone.jar -role hub -debug
警告
Selenium Gridは、適切なファイアウォールアクセス許可を使用して外部アクセスから保護する必要があります。
グリッドを保護しないと、次の1つ以上が発生する可能性があります。
- グリッドインフラストラクチャへのオープンアクセスを提供します。
- サードパーティが内部Webアプリケーションおよびファイルにアクセスすることを許可します。
- サードパーティにカスタムバイナリの実行を許可します。
Detectify に関するこのブログ投稿をご覧ください。 これは、公開されたグリッドが悪用される可能性のある概要を示しています。 Don’t Leave your Grid Wide Open
Docker Selenium
Docker は、コンテナと呼ばれる単位でSelenium Gridインフラストラクチャをプロビジョニングおよびスケーリングする便利な方法を提供します。 コンテナは、さまざまなマシンで信頼性と再現性のある方法で、すべての依存関係を含む目的のアプリケーションを実行するために必要なすべてを含むソフトウェアの標準化されたユニットです。
Seleniumプロジェクトは、ダウンロードして実行して作業用グリッドを迅速に起動および実行できる一連のDockerイメージを保持しています。 ノードはFirefoxとChromeの両方で使用できます。 グリッドのプロビジョニング方法の詳細は、 Docker Selenium リポジトリ内にあります。
前提条件
グリッドを実行するための唯一の要件は、Dockerをインストールして動作させることです。 Dockerのインストール.
3 - グリッドのコンポーネント
ハブ
- 仲介者およびマネージャー
- テストを実行する要求を受け入れます
- クライアントから命令を受け取り、ノード上でリモートで実行します
- スレッドを管理します
ハブ は、すべてのテストが送信される中心点です。 各Selenium Gridは、ちょうど1つのハブで構成されます。 ハブは、それぞれのクライアント(CIサーバー、開発者マシンなど)から到達可能である必要があります。 ハブは、テストが委任される1つ以上のノードを接続します。
ノード
- ブラウザが存在する場所
- ハブに自分自身を登録し、その機能を伝えます
- ハブからリクエストを受信して実行します
ノード は、個々のコンピューターシステムでテストを実行するさまざまなSeleniumインスタンスです。 グリッドには多くのノードが存在する場合があります。 ノードであるマシンは、ハブまたは他のノードと同じプラットフォームであったり、同じブラウザーを選定する必要はありません。 Windows上のノードは、Internet Explorerをブラウザーオプションとして提供する機能を備えている場合がありますが、これはLinuxまたはMacでは不可能です。