2017-08-09 32 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