如何在Selenium Grid中终止会话?我的问题是,如果我的测试失败集线器仍然保持此测试的会话,我不能运行另一个测试(它运行但失败,因为无法获得免费节点,因为它在集线器中注册)。我找到了这个How to kill thread in a Selenium Grid node并且有一个使用gc()
的答案,但它对我不起作用。关于Selenium Grid或Extras的文档是非常纯粹的,也许有些人有类似的问题并知道如何解决它?
答案 0 :(得分:10)
集线器永远不会拒绝新的会话请求,因为插槽不可用。新会话最终在Grid的队列中。
您需要查看代码以检查为什么driver.quit()
不会一直被调用(无论测试失败的原因)。
有时您的客户端可能会崩溃(例如,运行测试用例的JVM可能会崩溃,或者您可能会在IDE中点击stop button
以终止测试。在这种情况下,您最终会创建孤立的会话
但网格还有通过属性清除它们的机制,你可以在启动它时指定给网格。
selenium Grid专门有三个参数用于这类清理。
-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回答来了解如何获取它并查看可用的其他选项。
网格 2 wiki页面here上有一些与timeouts
相关的其他文档。
有关更多信息,请参阅stackoverflow帖子中的我的评论:Selenium driver instance persists if test is aborted on Jenkins