コマンドラインオプションとして設定するか、JSON構成で設定するかに関係なく、ハブまたはノード、またはその両方に設定するかどうかに関係なく、Selenium Grid2をmaxSessionパラメーターに準拠させることができないようです。グリッドはそれを完全に無視します。バグ チケットを開く前に、これが正しく行われていることを確認したいと思います。
これは、最新のselenium-server-standalone-jarおよびselenium-webdriver NPM モジュールを利用する node.js アプリケーションです。プロセスは大まかに次のように分類されます。
1) ローカルで実行されているセレン グリッド ハブを開始します。
var jar = require("selenium-server-standalone-jar"),
hub = require("selenium-webdriver/remote").SeleniumServer(jar.path, {
loopback: true,
port: 4444,
args: [ "-role hub", "-hubConfig " + config_path ]
});
そのハブ構成ファイルは次のようになります。
{
"host": null,
"port": 4444,
"newSessionWaitTimeout": -1,
"throwOnCapabilityNotPresent": true,
"nodePolling": 5000,
"cleanUpCycle": 5000,
"timeout": 300000,
"browserTimeout": 0,
"maxSession": 1
}
2) ローカルで実行されているセレン グリッド ノードを開始します。
var hub = require("selenium-webdriver/remote").SeleniumServer(jar.path, {
loopback: true,
port: 5555,
args: [ "-role node", "-nodeConfig " + config_path ]
});
ノード構成は次のようになります。
{
"capabilities": [
{
"browserName": "firefox",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"configuration": {
"maxSession": 1,
"port": 5555,
"host": "127.0.0.1",
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1"
}
}
したがって、この時点で、maxSession=1 で実行されているハブと、maxSession=1 および maxInstances=1 (Firefox の場合) で実行されているノードがあります。これは、アプリケーションが長期的に機能する方法ではありません。セッションを制限できることをSelenium Gridに実証させようとしているだけです。
3) 5 つの子プロセスを開始し、それぞれがハブ サーバーを使用して独自の webdriver を使用します。
それぞれがブラウザ アクションを実行し、終了する前に Web ドライバを閉じます。
私が期待すること:グリッドは、それらの子プロセスが開くことができるブラウザーの数を制限する必要があります。その結果、子プロセスが順番待ちになるかどうか。
私が実際に見たもの:一連の Firefox ウィンドウが開き (閉じる前に最大 30 まで上昇させました)、maxSession と maxInstance の構成を完全に無視して、それらのステップを並行して実行し始めます。
更新 2016-04-14
この問題を SeleniumServer クラスに分離しました。コンストラクターに指定した「args」オプションが無視されているようです。これは、テストの実行中に localhost:4444/grid/console に到達できないことを説明しています。スタンドアロン サーバー jar が「ハブ」ロールで実行されていません。
child_process.exec を使用して jar を直接 (役割と JSON 構成を使用して) 実行すると、すべてが多かれ少なかれ正しく機能し始めることを確認しましたが、ハブの準備とキュウリの間に競合状態が存在するという点で、このアプローチには問題があります。テストが Web ドライバーをそれに接続しようとします。理想的には、計画どおりに SeleniumServer を使用したいと考えています。私が間違っているかもしれないこと、またはそれをどのように動作させることができるかについてのアドバイスは、大歓迎です。