如果在Jenkins上中止测试,则Selenium驱动程序实例仍然存在

时间:2017-07-24 17:10:42

标签: selenium jenkins protractor selenium-grid cucumberjs

好的,所以我想知道如果测试通过jenkins中止,我怎样才能让我的驱动程序/浏览器会话正确退出。在本地,如果我运行我的测试并中止它们,浏览器将正常退出。然而,通过詹金斯,这不会发生。如果我在我的测试在selenium网格上运行的测试阶段中止作业,浏览器保持打开状态 - 导致节点仍然显示为正在使用,因为它没有发现中止的作业应该已经杀死了它的浏览器会话

我一直在搞乱黄瓜钩子,但我想的越多,我不确定我是否可以用钩子来处理这个问题,因为在本地运行时这种行为不会发生。我现在认为这需要是对selenium网格或jenkins的设置。

我最理想的解决方案是使用类似下面的钩子来判断它是否正在远程运行并在中止/传递/失败时终止会话。但是,如果通过jenkins或selenium网格设置有任何解决方案,那也很棒!谢谢!

this.registerHandler('After', function (event, done) {
     // Some code to clear browser session 
    done();
});

2 个答案:

答案 0 :(得分:3)

我认为您不需要在客户端代码处执行任何额外操作。

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相关的其他文档。

希望有所帮助!

答案 1 :(得分:0)

这与在本地中止执行后想要做某事基本相同,jenkins对你的网格一无所知只会构建代码。

考虑根据前一个执行结果执行单独的工作,在其中你可以通过杀死被困的进程来清理你的env,并且可能重新启动网格本身。