2017-08-09 30 views
0

如何在Selenium Grid中終止會話?我的問題是,如果我的測試失敗集線器仍保持會話進行此測試,我無法運行另一個測試(它運行但失敗,因爲無法獲得空閒節點,因爲它在集線器中註冊)。我找到了這個How to kill thread in a Selenium Grid node,並且有一個使用DELETE /session/:sessionId的答案,但它對我不起作用。關於Selenium Grid或Extras的文檔非常純粹,也許有人有類似的問題,並知道如何解碼它?如何在Selenium Grid中終止會話(Extras)

+0

輪轂從未否認新的會話請求,因爲一個插槽不可用。新會話結束於網格隊列中。爲什麼你的測試沒有正確地關閉會話?你看過那部分?無論測試通過還是失敗(由於斷言失敗或由於異常),它們都應該始終調用'driver.quit()'來刪除會話。 –

+0

你可能是對的。當我停止測試時,例如通過Intellij,關閉驅動程序的'tearDown'方法將不會運行,但即使停止使用Intellij測試,如何實現運行tearDown方法? – slovvic

回答

2

集線器從不拒絕新的會話請求,因爲插槽不可用。新會話結束於網格隊列中。

您需要查看您的代碼,以檢查爲什麼driver.quit()不會始終被調用(無論測試失敗的原因如何)。

有時候,你的客戶可能會崩潰(對於例如,在你的測試用例運行JVM可能會崩潰,或者你可能在你的IDE殺死你的測試擊中stop button。在這種情況下,你最終會產生孤立的會話。

但網格有機制,通過把它時,你可以指定到網格屬性清理起來也是如此。

硒電網特別是有意味着這些排序清理的三個參數。

  • -browserTimeout以秒爲單位:瀏覽器會話在WebDriver命令運行時允許掛起的秒數(例如:driver.get(url))。如果在WebDriver命令仍在處理時達到超時,則會話將退出。最小值爲60.未指定,零或負值表示無限期等待。 Default: 0

  • -cleanUpCycle毫秒:指定轂將如何經常輪詢超時運行的代理(即掛起)線程。還必須指定timeout選項。 Default: 5000(5秒)

  • -timeout,以秒爲-sessionTimeout:指定超時服務器自動殺死一直沒有任何活動在過去的X秒會話之前。然後測試槽將被釋放以供另一測試使用。這通常用於處理客戶端崩潰。對於網格集線器/節點角色,還必須設置cleanUpCycle。 Default: 1800

使用所有上述3個參數的組合,你可以配置你的節點自動關閉孤兒瀏覽器實例和會話。

本文檔在selenium uber jar本身內可用作命令行文檔。您可以參考this SO答案來了解如何獲取它並查看可用的其他選項。

在Grid'2維客頁面here上有一些與timeouts相關的其他文檔。

欲瞭解更多信息,請參考我的意見在計算器後:Selenium driver instance persists if test is aborted on Jenkins