【问题标题】:Selenium driver instance persists if test is aborted on Jenkins如果在 Jenkins 上中止测试,Selenium 驱动程序实例仍然存在
【发布时间】:2017-12-30 09:04:56
【问题描述】:

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

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

我最理想的解决方案是使用如下所示的钩子,它可以判断它是否正在远程运行,并在中止/通过/失败时终止会话。但是,如果通过 jenkins 或 selenium 网格设置有任何解决方案,那也太好了!谢谢!

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

【问题讨论】:

    标签: selenium jenkins protractor selenium-grid cucumberjs


    【解决方案1】:

    我认为您不需要在客户端代码中做任何额外的事情。

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

    希望有帮助!

    【讨论】:

    • 感谢您的回复!所以查看网格设置,我们有一个 browserTimeout: 16000, cleanUpCycle: 5000, timeout: 19000。我们可以尝试缩小这些设置,但我已经观察了节点并且浏览器一直存在,直到我们最终重新启动网格。
    • @Tree55Topz - 您能否先尝试将值降低到合理的限制,看看是否有帮助? AFAIK 它应该可以帮助您清理过时的浏览器实例和孤立的会话。
    • 你认为合理的设置是什么?即使使用这些设置,我们是否仍会看到浏览器在 19 秒不活动时终止?事实并非如此:(
    • 根据您共享为现有值的内容,您的browserTimeout 值为16000 seconds(非常大的值,应该在60 seconds 附近)和timeout 值为@987654336 @(同样非常大的值,应该在 45 seconds 附近)请注意,这些值以秒为单位,但我认为您可能将它们解释为毫秒?
    • 哦哇..好的,我完全明白你的意思。我的印象是它是女士。我会尽量减少这些设置。还有一个问题 - cleanUpCycle 和 timeout 之间的良好协同作用是什么?似乎如果浏览器处于非活动状态(没有在其上运行 WebDriver 命令),则应立即清除它
    【解决方案2】:

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

    考虑根据前一个任务的执行结果执行单独的作业,在其中您可以通过杀死卡住的进程并可能重新启动网格本身来清理您的环境。

    【讨论】:

    • 这个解决方案的唯一问题是我们有多个团队针对网格运行测试。我不想让另一个工作杀死正在运行的测试,重新启动网格会做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2022-10-15
    • 2016-01-28
    • 2017-12-24
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多