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

求助:Selenium+Cucumber结合Sauce Labs时driver.quit()卡顿无响应

解决Sauce Labs环境下Selenium @After钩子中driver.quit()卡顿问题

问题背景

环境配置:

  • IntelliJ
  • Selenium + Cucumber + Java
  • 通过Sauce Connect(带隧道标识符)执行测试用例

本地运行测试脚本一切正常,但在Sauce Labs环境下,@After钩子中的driver.quit()会卡顿数小时,无任何报错,控制台仅输出"Printing till here",后续代码不执行,脚本一直处于运行状态。尝试过try-finally、try-catch、先close再quit等方式均无效。

可行解决方案

1. 为WebDriver设置超时时间

在调用quit()前,设置脚本超时和页面加载超时,避免无限等待Sauce Labs端的响应:

@After
public void tearDown(Scenario scenario) {
    if (driver() != null) {
        System.out.println("Printing till here"); 
        // 设置超时时间
        driver().manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);
        driver().manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
        driver().quit();  
        System.out.println("Not printing");
    }
}

2. 通过Sauce Labs API强制终结会话

绕过WebDriver的quit(),直接调用Sauce Labs的REST API主动删除会话,确保会话被终止:

@After
public void tearDown(Scenario scenario) {
    if (driver() != null) {
        System.out.println("Printing till here"); 
        try {
            // 获取会话ID
            String sessionId = ((RemoteWebDriver) driver()).getSessionId().toString();
            // 构建API请求URL,替换为你的Sauce用户名和Access Key
            URL url = new URL("https://你的用户名:你的AccessKey@ondemand.saucelabs.com:443/rest/v1/你的用户名/sessions/" + sessionId);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("DELETE");
            connection.connect();
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 尝试常规quit,即使API调用失败
            driver().quit();
        }
        System.out.println("Not printing");
    }
}

3. 检查并重置Sauce Connect隧道

  • 关闭当前Sauce Connect隧道,重新启动,排除隧道连接异常导致的会话终结阻塞
  • 查看Sauce Connect的日志,检查是否存在连接中断、超时或隧道标识符不匹配的问题
  • 确认测试脚本中使用的隧道标识符与Sauce Connect启动时的参数一致

4. 更新依赖版本

可能是旧版本的Selenium或Sauce相关库存在兼容性bug,更新到最新稳定版:

  • 将Selenium Java绑定更新至4.x系列最新版
  • 同步更新Cucumber相关依赖到适配版本
  • 如果使用了Sauce Labs官方Java客户端,也更新到最新版

5. 先关闭所有窗口再执行quit()

逐个关闭所有打开的窗口,避免单个窗口的异常导致quit()操作阻塞:

@After
public void tearDown(Scenario scenario) {
    if (driver() != null) {
        System.out.println("Printing till here"); 
        // 关闭所有窗口
        for (String handle : driver().getWindowHandles()) {
            driver().switchTo().window(handle);
            driver().close();
        }
        driver().quit();  
        System.out.println("Not printing");
    }
}

内容的提问来源于stack exchange,提问作者Kartik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:23:16