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

升级WebDriverManager至5.2.1后getChromeDriverVersion返回空值问题

问题根因

WebDriverManager 5.x 相比 4.x 做了核心逻辑重构,存在两处不兼容变更直接导致原有代码失效:

  • 4.x 版本中WebDriverManager.chromedriver()返回全局单例对象,任意位置调用配置方法修改的是同一个实例的属性;5.x 版本该方法每次调用都会生成全新的独立管理器实例,你第一次调用setChromeDriverVersion是在第一个实例上写入配置,第二次调用getChromeDriverVersion是在无任何配置的新实例上读取,自然返回空值。
  • 5.x 版本将配置拆分为全局配置、管理器实例配置两层,已经不推荐通过config()对象操作单种驱动的版本参数,原有配置读写链路的逻辑做了调整。
适配方案

根据你的代码场景,二选一即可:

方案1:最小改动适配

持有同一个WebDriverManager实例做配置读写,不要每次链式调用都重新生成实例,同时修正Java字符串中Windows路径的转义问题:

// 初始化唯一的Chrome驱动管理器实例
WebDriverManager chromeManager = WebDriverManager.chromedriver();
// 同实例写入版本配置
chromeManager.config().setChromeDriverVersion(driverVersion);
// 同实例读取配置,不会返回空
driverFile = new File(Global.WINDOWS_USER_HOME + "\\.cache\\selenium\\chromedriver\\win32\\" 
        + chromeManager.config().getChromeDriverVersion() 
        + "\\chromedriver.exe");

方案2:官方推荐写法(兼容性更好)

使用5.x新增的实例级API设置版本,不要硬编码拼接缓存路径,避免后续版本调整缓存结构再次失效:

WebDriverManager chromeManager = WebDriverManager.chromedriver()
        .driverVersion(driverVersion) // 官方指定的版本设置方法
        .setup(); // 显式触发驱动校验、下载流程,5.x必须调用该方法才会完成驱动准备

// 直接获取实际使用的驱动版本,比读配置更准确
String usedDriverVersion = chromeManager.getDownloadedDriverVersion();
// 不需要自己拼路径,直接拿框架定位好的驱动文件对象,适配全系统、全版本
driverFile = new File(chromeManager.getDownloadedDriverPath());

注意:硬编码拼接缓存路径的写法在5.x多个小版本中已经出现过目录结构调整的情况,比如Chrome 115+之后驱动目录按平台分类的规则就有变动,优先调用框架提供的getDownloadedDriverPath()方法拿路径,不需要自己维护路径拼接逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:51:20