启动ChromeDriver时遭遇java.lang.NoSuchMethodError问题求助
解决ChromeDriver启动时的java.lang.NoSuchMethodError错误
嘿,我帮你分析下这个java.lang.NoSuchMethodError的问题,这在Selenium+ChromeDriver的场景里大多是版本不兼容或者依赖冲突搞的鬼,给你几个实用的解决方向:
先排查版本兼容性问题
这个错误最常见的原因就是Selenium版本和ChromeDriver、Chrome浏览器版本不匹配。你先做这几步:- 打开Chrome浏览器的「设置」→「关于Chrome」,查看你的浏览器版本
- 确保下载的ChromeDriver版本和浏览器版本完全对应(比如Chrome是118.x,就用118.x的ChromeDriver)
- 同时Selenium版本也要适配,比如Chrome 114+版本建议搭配Selenium 4.10.0及以上版本
检查项目依赖冲突
如果你的项目用了Maven或Gradle,很可能是依赖传递引入了不同版本的Selenium组件,导致方法找不到。- 用Maven的
mvn dependency:tree命令,或者Gradle的./gradlew dependencies命令生成依赖树,找出重复或版本不一致的Selenium依赖 - 把旧版本的依赖排除掉,比如Maven中可以这么写:
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.11.0</version> <exclusions> <exclusion> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-api</artifactId> </exclusion> </exclusions> </dependency>
- 用Maven的
修正驱动路径的获取方式
你代码里用Application.class.getClassLoader().getResource("driver/chromedriver.exe").getFile()获取路径,当项目打包成Jar包后,这个方法可能拿不到正确的路径(因为资源在Jar内部)。可以试试两种方案:- 先直接写死绝对路径测试,确认驱动本身没问题:
String driverPath = "C:\\your-local-path\\chromedriver.exe"; System.setProperty("webdriver.chrome.driver", driverPath); driver = new ChromeDriver(); driver.get("https://google.com"); - 如果用的是Selenium 4.6.0及以上版本,完全可以不用手动设置驱动路径,Selenium自带自动驱动管理:
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class Hook { private WebDriver driver; public void testInitializer(){ driver = new ChromeDriver(); driver.get("https://google.com"); } }
- 先直接写死绝对路径测试,确认驱动本身没问题:
清理项目缓存并重新构建
有时候旧的编译缓存或依赖缓存会导致奇怪的问题,你可以:- 清理Maven/Gradle的target/build目录
- 重新执行
mvn clean install(Maven)或./gradlew clean build(Gradle)命令,重新下载依赖并构建项目
内容的提问来源于stack exchange,提问作者Jeff




