You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Geb结合Selenoid:为类/规范中每个测试创建新会话

解决Geb + Selenoid每个测试生成独立视频的问题

要实现每个测试方法对应独立的Selenoid视频,核心是让每个测试方法启动全新的WebDriver会话,同时避免"Session ID is null"的错误。以下是可行的配置和代码调整方案:

1. 正确配置Geb的Driver缓存

在GebConfig.groovy中设置:

cacheDriver = false
quitDriverOnBrowserReset = true
  • cacheDriver = false:禁止Geb复用Driver实例,确保每次请求Driver时创建新会话
  • quitDriverOnBrowserReset = true:重置浏览器时自动退出当前Driver,释放Selenoid会话

2. 利用测试框架钩子(以Spock为例)

在测试规范类中,通过setup()和cleanup()方法手动管理Driver生命周期:

class YourTestSpec extends GebSpec {

    def setup() {
        // 强制创建新Driver会话(覆盖默认缓存逻辑)
        browser.driver = CachingDriverFactory.getDriver()
    }

    def cleanup() {
        // 退出当前Driver并清理缓存,确保下一个测试启动新会话
        CachingDriverFactory.clearCacheAndQuitDriver()
        browser.clearCookies()
    }

    // 测试方法示例
    def "测试方法1"() {
        when:
        go "https://example.com"
        then:
        title == "Example Domain"
    }

    def "测试方法2"() {
        when:
        go "https://google.com"
        then:
        title.contains("Google")
    }
}
  • setup():在每个测试前主动获取新Driver,确保会话独立
  • cleanup():测试结束后立即退出Driver并清理缓存,避免残留会话导致的错误

3. 配置Selenoid动态视频命名

在GebConfig.groovy的Capabilities中设置动态视频文件名,方便区分每个测试:

capabilities = {
    browserName = "chrome"
    "selenoid:options" = [
        enableVNC: true,
        enableVideo: true,
        videoName: { "${specName}_${testName}.mp4" } // 用测试类名+方法名命名视频
    ]
}

常见问题排查

  • 若仍出现"Session ID is null":检查是否存在全局共享的Driver实例,或测试中是否有未正确清理的Driver引用
  • 若视频仍合并为一个:确认cacheDriver = false配置是否生效,以及每个测试后是否确实调用了clearCacheAndQuitDriver()

内容的提问来源于stack exchange,提问作者Константин Тонков

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:02:04