1

Selenium Grid を使用してホスト ファイルを変更するリモート ノード マシン上にあるバッチ ファイルを実行する方法はありますか?

VM1 にはコードが含まれ、ハブとして機能します VM2 は Chrome ノードを実行します VM3 は Firefox ノードを実行します VM4 は IE ノードを実行します

各 VM には一連のバッチ ファイルが存在しますが、そのまま実行すると、VM1 のみがバッチ ファイルを実行します。正しいノードでバッチ ファイルを実行するように Selenium に指示するにはどうすればよいですか?

FWIW、私は現在、ジェンキンス経由でジョブを実行しています。

最初にコードを書いたとき、グリッドは使用せず、Eclipse を介してローカルでテストを実行するだけでした。そうは言っても、私はこのタスクを処理する AutoIT スクリプトを作成しました。ローカルで実行しているときに機能する私が使用しているコードは次のとおりです。

String env = StoredVariables.getenvironment().get();

if (env.equals("Beta Offline"))
{
    env = "BetaOffline";
}
if (env.equals("Live Offline"))
{
    env = "LiveOffline";
}

System.out.println("Set hosts file to " + env + " via AutoIT");

Thread.sleep(3000);

Runtime.getRuntime().exec(StoredVariables.getautoIT().get()+"HostsSwitcher.exe " + StoredVariables.getautoIT().get() + " " + env);
4

2 に答える 2

1

方法は次のとおりです。

  1. まず、共有したコード ロジックを格納し、GET または POST メソッドを介して呼び出すことができるカスタム サーブレットを構築します。
  2. 起動時にサーブレットをノードに注入する必要があります。その方法については、こちらを参照してください。
  3. 次に、カスタム サーブレットが注入されたノードを起動します。
  4. これで、テストの実行を開始できます。ノードでバッチを実行する必要がある時点で、グリッドにクエリを実行して、テストがルーティングされたノード IP とノード ポートを見つけます。[このブログ投稿を参照して、グリッドにクエリを実行して、テストがルーティングされたノードの IP とポートを取得する方法を学習できます。]
  5. (4) で取得した IP と PORT を使用して、GET または POST をトリガーし、テスト コードからバッチ コマンドを実際にトリガーします。

それは基本的にあなたのユースケースを解決するはずです。

于 2016-10-15T05:34:46.663 に答える
0

クリシュナン・マハデヴァンからの上記の回答は、私が始めるきっかけとなった良いガイドでした. 彼の手順 1 ~ 3 を使用して、エンド ノードで実行するサーブレットを作成しました。

手順 4 と 5 では、別のアプローチを使用しました。クライアントに Selenium ノードの IP を調べて直接通信させる代わりに、クライアントにハブと通信させてから、ハブに要求を正しいノードにプロキシさせる方が簡単でした。

幸いなことに、他の誰かがselenium-grid-extensionsプロジェクトのハブにプロキシを作成する作業を既に完了しています。hub-extensionsコンポーネントは、次の形式の Selenium Hub に対して行われた要求をプロキシします。

/grid/admin/HubRequestsProxyingServlet/session/${SESSIONID}/YourServletName

のパスを持つ正しいノードに再ルーティングします/extra/YourServletName

これを使用して、クライアント コードからセッション ID を取得できます。

RemoteWebDriver driver;

String sessionId = driver.getSessionId().toString();
于 2018-07-11T14:34:37.250 に答える