【问题标题】:How to terminate session in Selenium Grid(Extras)如何终止 Selenium Grid 中的会话(附加)
【发布时间】:2018-01-17 10:04:45
【问题描述】:

如何终止 Selenium Grid 中的会话?我的问题是,如果我的测试失败集线器仍然保持该测试的会话并且我无法运行另一个测试(它运行但失败,因为无法获得空闲节点,因为它已在集线器中注册)。我找到了这个How to kill thread in a Selenium Grid node 并且有一个使用DELETE /session/:sessionId 的答案,但它对我不起作用。 Selenium Grid 或 Extras 的文档非常纯粹,也许有人有类似的问题并且知道如何解决它?

【问题讨论】:

  • 集线器从不拒绝新的会话请求,因为插槽不可用。新会话最终出现在 Grid 的队列中。为什么您的测试没有正确关闭会话?你看过那部分吗?无论测试是通过还是失败(由于断言失败或由于异常),他们都应该始终调用driver.quit() 来删除会话。
  • 你可能是对的。当我停止测试时,例如通过 Intellij,关闭驱动程序的 tearDown 方法将无法运行,但是即使我停止使用 Intellij 进行测试,如何实现运行 tearDown 方法?

标签: selenium-grid selenium-grid2


【解决方案1】:

集线器从不拒绝新的会话请求,因为插槽不可用。新会话在 Grid 的队列中结束。

您需要查看您的代码以检查为什么没有一直调用 driver.quit()(无论测试为何失败)。

有时您的客户端可能会崩溃(例如,运行测试用例的 JVM 可能会崩溃,或者您可能会在 IDE 中点击 stop button 来终止您的测试。在这种情况下,您最终会创建孤立的会话。

但是 Grid 也有通过属性清除它们的机制,您可以在启动 Grid 时指定这些属性。

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 回答了解如何获取它并查看其他可用选项。

在 Grid'2 wiki 页面 here 上有一些与 timeouts 相关的其他文档。

有关更多信息,请参阅我在 stackoverflow 帖子中的 cmets:Selenium driver instance persists if test is aborted on Jenkins

【讨论】:

  • 我已经设置了 -timeout=60 和 -browserTimeout=180 但在 kubernetes selenium grid helm chart 中没有找到 -sessionTimeout。我该如何修改?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多