如果在 Jenkins 上中止测试,Selenium 驱动程序实例仍然存在
Selenium driver instance persists if test is aborted on Jenkins
好的,所以我想知道如果通过 jenkins 中止测试,我如何才能让我的 driver/browser 会话正确退出。在本地,如果我 运行 我的测试并中止它们,浏览器将正确退出。然而,通过詹金斯,这不会发生。如果我在 selenium 网格上的测试 运行ning 测试阶段中止作业,浏览器将保持打开状态 - 导致节点仍显示为正在使用,因为它没有接收到中止的作业应该已终止其浏览器会话。
我一直在摆弄黄瓜钩子,但我越想越不确定我是否可以用钩子来处理这个问题,因为 运行 在本地这种行为不会发生。我现在认为这需要是 selenium 网格或 jenkins 上的设置。
我最好的解决方案是使用如下所示的挂钩,它可以判断它是否正在远程 运行,如果 aborted/passed/failed 则终止会话。但是,如果通过 jenkins 或 selenium 网格设置有任何解决方案,那也很棒!谢谢!
this.registerHandler('After', function (event, done) {
// Some code to clear browser session
done();
});
这与在本地中止执行后想要做某事基本相同,jenkins 对您的网格一无所知它只构建代码。
考虑根据前一个作业的执行结果来执行单独的作业,在其中您可以通过终止卡住的进程并可能重新启动网格本身来清理您的环境。
我认为您不需要在客户端代码中做任何额外的事情。
selenium Grid 专门具有三个用于此类清理的参数。
-browserTimeout
以秒为单位:WebDriver 命令为 运行 时允许浏览器会话挂起的秒数(示例: driver.get(url)).如果在 WebDriver 命令仍在处理时达到超时,会话将退出。最小值为 60。未指定的零值或负值表示无限期等待。 Default: 0
-cleanUpCycle
以毫秒为单位:指定集线器轮询 运行 代理超时(即挂起)线程的频率.还必须指定 timeout
选项。Default: 5000
(5 秒)
-timeout
, -sessionTimeout
in seconds : 指定服务器超时前自动终止在过去 X 秒内没有任何 activity 的会话。然后将释放测试槽以供另一次测试使用。这通常用于处理客户端崩溃。对于网格 hub/node 角色,还必须设置 cleanUpCycle。 Default: 1800
结合使用上述所有 3 个参数,您可以将节点配置为自动关闭 孤立 浏览器实例和会话。
此文档在 selenium uber jar 本身中作为命令行文档提供。您可以参考 SO 答案以了解如何获取它并查看其他可用选项。
Grid'2 wiki 页面 here 上有一些与 timeouts
相关的附加文档。
希望对您有所帮助!
好的,所以我想知道如果通过 jenkins 中止测试,我如何才能让我的 driver/browser 会话正确退出。在本地,如果我 运行 我的测试并中止它们,浏览器将正确退出。然而,通过詹金斯,这不会发生。如果我在 selenium 网格上的测试 运行ning 测试阶段中止作业,浏览器将保持打开状态 - 导致节点仍显示为正在使用,因为它没有接收到中止的作业应该已终止其浏览器会话。
我一直在摆弄黄瓜钩子,但我越想越不确定我是否可以用钩子来处理这个问题,因为 运行 在本地这种行为不会发生。我现在认为这需要是 selenium 网格或 jenkins 上的设置。
我最好的解决方案是使用如下所示的挂钩,它可以判断它是否正在远程 运行,如果 aborted/passed/failed 则终止会话。但是,如果通过 jenkins 或 selenium 网格设置有任何解决方案,那也很棒!谢谢!
this.registerHandler('After', function (event, done) {
// Some code to clear browser session
done();
});
这与在本地中止执行后想要做某事基本相同,jenkins 对您的网格一无所知它只构建代码。
考虑根据前一个作业的执行结果来执行单独的作业,在其中您可以通过终止卡住的进程并可能重新启动网格本身来清理您的环境。
我认为您不需要在客户端代码中做任何额外的事情。
selenium Grid 专门具有三个用于此类清理的参数。
-browserTimeout
以秒为单位:WebDriver 命令为 运行 时允许浏览器会话挂起的秒数(示例: driver.get(url)).如果在 WebDriver 命令仍在处理时达到超时,会话将退出。最小值为 60。未指定的零值或负值表示无限期等待。Default: 0
-cleanUpCycle
以毫秒为单位:指定集线器轮询 运行 代理超时(即挂起)线程的频率.还必须指定timeout
选项。Default: 5000
(5 秒)-timeout
,-sessionTimeout
in seconds : 指定服务器超时前自动终止在过去 X 秒内没有任何 activity 的会话。然后将释放测试槽以供另一次测试使用。这通常用于处理客户端崩溃。对于网格 hub/node 角色,还必须设置 cleanUpCycle。Default: 1800
结合使用上述所有 3 个参数,您可以将节点配置为自动关闭 孤立 浏览器实例和会话。
此文档在 selenium uber jar 本身中作为命令行文档提供。您可以参考
Grid'2 wiki 页面 here 上有一些与 timeouts
相关的附加文档。
希望对您有所帮助!