web-dev-qa-db-ja.com

Seleniumグリッドでセッションを終了する方法(追加)

Selenium Gridでセッションを終了するにはどうすればよいですか?私の問題は、テストが失敗した場合、ハブがまだこのテストのセッションを維持し、別のテストを実行できないことです(実行されますが、ハブに登録されているため、空きノードを取得できないため失敗します)。私はこれを見つけました Seleniumグリッドノードでスレッドを強制終了する方法 そしてDELETE /session/:sessionIdを使用する答えがありますが、それは私にとってはうまくいきませんでした。 Selenium GridまたはExtrasのドキュメントは非常に純粋です。おそらく、同様の問題があり、それを再販する方法を知っている人がいますか?

5
slovvic

スロットが使用できないため、ハブが新しい​​セッション要求を拒否することはありません。新しいセッションは、最終的にグリッドのキューに入れられます。

コードを調べて、driver.quit()が常に呼び出されない理由を確認する必要があります(テストが失敗する理由に関係なく)。

クライアントがクラッシュする場合があります(たとえば、テストケースが実行されるJVMがクラッシュしたり、IDE)のstop buttonを押してテストを強制終了したりする場合があります。そのような状況では孤立したセッションを作成することになります。

ただし、グリッドには、グリッドを起動するときにグリッドに指定できるプロパティを介して、それらをクリアするメカニズムもあります。

Selenium Gridには、この種のクリーンアップを目的とした3つのパラメーターがあります。

  • -browserTimeout秒単位:WebDriverコマンドの実行中にブラウザーセッションをハングさせることができる秒数(例:driver.get(url ))。 WebDriverコマンドの処理中にタイムアウトに達すると、セッションは終了します。最小値は60です。指定されていない、ゼロ、または負の値は、無期限に待機することを意味します。 Default: 0

  • -cleanUpCycleミリ秒単位:ハブが実行中のプロキシをポーリングしてタイムアウト(つまりハング)したスレッドを探す頻度を指定します。 timeoutオプションも指定する必要があります。Default: 5000 (5秒)

  • -timeout-sessionTimeout秒単位:過去X秒間にアクティビティがなかったセッションをサーバーが自動的に強制終了するまでのタイムアウトを指定します。その後、テストスロットが解放され、別のテストで使用できるようになります。これは通常、クライアントのクラッシュを処理するために使用されます。グリッドハブ/ノードの役割の場合、cleanUpCycleも設定する必要があります。 Default: 1800

上記の3つのパラメーターすべての組み合わせを使用して、ブラウザーのインスタンスとセッションを自動的に閉じる孤立したようにノードを構成できます。

このドキュメントは、コマンドラインドキュメントとしてSelenium uberjar自体から入手できます。 this SO回答を参照して、取得方法を学び、他に利用できるオプションを確認できます。

Grid'2 wikiページにtimeoutsに関連する追加のドキュメントがいくつかあります ここ

詳細については、stackoverflowの投稿の私のコメントを参照してください: Jenkinsでテストが中止された場合、Seleniumドライバーインスタンスは存続します

13