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

启动ChromeDriver时出现SessionNotCreatedException异常求助

解决Selenium Chrome复用现有实例时的SessionNotCreatedException问题

核心原因

当已有Chrome实例运行时,未配置独立会话隔离参数会导致Selenium尝试复用现有窗口但无法正确初始化新会话,进而触发渲染器超时或进程崩溃判定;并行测试时线程间共享Chrome资源也会引发同类冲突。

解决方案

1. 配置独立用户数据目录与会话隔离参数

通过指定唯一的用户数据目录,让每个测试会话拥有独立的Chrome环境,避免与现有实例冲突。同时配置参数强制启动新窗口而非复用标签页:

ChromeOptions options = new ChromeOptions();
// 生成唯一的临时用户数据目录,避免会话冲突
String uniqueUserDataDir = System.getProperty("java.io.tmpdir") + "chrome_session_" + Thread.currentThread().getId();
options.addArguments("--user-data-dir=" + uniqueUserDataDir);
// 强制启动新窗口
options.addArguments("--new-window");
// 禁用GPU加速,解决部分环境下的渲染超时问题
options.addArguments("--disable-gpu");
options.addArguments("--disable-software-rasterizer");
// 禁用自动退出,避免ChromeDriver误判进程崩溃
options.addArguments("--no-exit");
// 禁用远程调试端口自动复用
options.addArguments("--remote-debugging-port=0");

// 初始化Driver
WebDriver driver = WebDriverManager.chromedriver().capabilities(options).create();

2. 并行测试的线程隔离配置

结合TestNG的并行机制,在每个测试方法的初始化阶段生成独立的Chrome配置,确保线程间资源完全隔离:

private WebDriver driver;

@BeforeMethod
public void setupDriver() {
    ChromeOptions options = new ChromeOptions();
    // 使用UUID生成绝对唯一的用户数据目录路径
    String sessionDir = "C:\\temp\\chrome_test_sessions\\" + UUID.randomUUID();
    options.addArguments("--user-data-dir=" + sessionDir);
    options.addArguments("--new-window");
    options.addArguments("--disable-gpu");
    
    // 通过WebDriverManager初始化对应版本的ChromeDriver
    driver = WebDriverManager.chromedriver().browserVersion("121.0.6167.161").capabilities(options).create();
}

@AfterMethod
public void teardownDriver() {
    if (driver != null) {
        driver.quit();
        // 清理临时用户数据目录
        String userDataPath = ((ChromeDriver) driver).getCapabilities()
                .getCapability("chromeOptions").toString()
                .split("--user-data-dir=")[1].split(" ")[0];
        deleteDir(new File(userDataPath));
    }
}

// 递归删除目录
private void deleteDir(File dir) {
    if (dir.exists()) {
        for (File file : dir.listFiles()) {
            if (file.isDirectory()) deleteDir(file);
            else file.delete();
        }
        dir.delete();
    }
}

3. 验证版本兼容性与驱动拉取逻辑

确认WebDriverManager是否正确匹配Chrome版本,可手动指定Chrome版本强制拉取对应驱动:

// 强制指定Chrome版本,确保驱动与浏览器版本完全匹配
WebDriverManager.chromedriver().browserVersion("121.0.6167.161").setup();

4. 禁用Chrome自动更新

自动更新可能导致浏览器版本突然变更,引发与ChromeDriver的兼容性问题。Windows环境可通过以下方式禁用:

  • 组策略:计算机配置>管理模板>Google>Google Chrome>更新策略>更新覆盖策略,设置为已禁用
  • 注册表:修改HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome下的UpdateDefault值为0

额外排查点

  • 检查临时目录权限,确保测试进程能创建和访问用户数据目录
  • 关闭Chrome所有扩展程序,部分扩展会干扰Selenium会话初始化
  • 尝试以管理员身份运行测试,排查权限不足导致的进程启动失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:10:26