Selenium依赖3.11.0却启动旧版ChromeDriver 2.31求助
为啥Selenium用了旧版ChromeDriver?
嘿,这个问题我之前踩过坑!明明在build.gradle里指定了selenium-chrome-driver:3.11.0,结果启动时还是跑2.31的版本,大概率是ChromeDriver的加载优先级冲突了,咱们一步步排查:
1. 系统PATH里的旧版ChromeDriver抢了先
Selenium查找ChromeDriver的逻辑是:先看你有没有手动指定路径,要是没有,就去系统的PATH环境变量里找。如果你的PATH里早就装了2.31版本的ChromeDriver,它就会优先调用这个旧版本,完全忽略你Gradle依赖里的新版本。
解决办法:
- 打开系统环境变量设置,找到
PATH,检查里面有没有旧版ChromeDriver的存放路径,把它删掉; - 或者把Gradle依赖中ChromeDriver的实际路径(一般在
~/.gradle/caches/modules-2/files-2.1/org.seleniumhq.selenium/selenium-chrome-driver/3.11.0/xxx/chromedriver)加到PATH最前面,让它优先被找到。
2. 代码里硬编码了旧版ChromeDriver路径
有没有可能你在测试代码里写了类似这样的代码?
System.setProperty("webdriver.chrome.driver", "/path/to/old/chromedriver");
这段代码会强制指定ChromeDriver的路径,直接覆盖Gradle依赖的版本,哪怕你依赖了3.11.0也没用。
解决办法:
- 删掉这段硬编码的代码,让Selenium自动使用Gradle依赖中的ChromeDriver;
- 如果你确实需要手动指定,就把路径换成3.11.0版本对应的chromedriver文件路径。
3. Gradle缓存或依赖冲突搞的鬼
有时候Gradle的本地缓存里还存着旧版本的依赖,或者其他第三方依赖间接引入了旧版的selenium-chrome-driver,导致版本冲突。
解决办法:
- 先清理Gradle缓存并重新拉取依赖,执行命令:
./gradlew clean build --refresh-dependencies - 然后查看项目的依赖树,检查有没有其他依赖偷偷引入了旧版ChromeDriver:
如果发现有冲突,就在依赖声明里排除掉旧版本,比如:./gradlew dependenciescompile(group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.11.0') { exclude group: 'org.seleniumhq.selenium', module: 'selenium-chrome-driver', version: '2.31.0' }
额外提醒:Chrome版本和Driver版本要匹配
虽然你现在的问题是Driver版本不对,但顺便提一句:3.11.0版本的ChromeDriver对应Chrome浏览器的67-69版本,如果你的Chrome版本太高,后续可能会出现兼容性问题,记得保持两者版本匹配哦!
内容的提问来源于stack exchange,提问作者PMartin
相关产品推荐
相关产品推荐

