启动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
相关产品推荐
相关产品推荐

