Selenium 4执行测试时遇java.lang.NoSuchMethodError问题求助
Selenium 4.6.0升级后
NoSuchMethodError问题求助 升级Selenium版本从3.141.59到4.6.0后,执行测试用例时触发以下错误:
java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMap.of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableMap;
经排查,问题根源是:底层依赖库调用ImmutableMap.of()时传入了12个参数,但当前依赖的Guava版本中该方法仅支持最多10个参数(测试代码未直接调用此方法)。
已尝试以下方案但均未解决:
- 将Guava版本从23.0升级至31.0.1-jre
- 将Guava版本从23.0升级至31.1-jre
- 添加io.github.bonigarcia依赖,版本5.0.3
- 添加io.github.bonigarcia依赖,版本5.1.0
- 尝试删除本地Maven仓库(.m2)中
com/google/common/collect/ImmutableMap相关文件,但未找到对应路径
当前环境信息
- Chrome版本:109.0.5414.120
- Java版本:1.8.0_341
- 限制:因维护公司测试框架,无法降级Selenium版本
可能的解决办法
强制排除Selenium自带的旧Guava并显式引入高版本
在Maven或Gradle配置中,先排除Selenium依赖自带的Guava,再明确引入支持12参数of()方法的高版本Guava(如31.1-jre):
Maven配置示例:<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.6.0</version> <exclusions> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.1-jre</version> </dependency>Gradle配置示例:
implementation('org.seleniumhq.selenium:selenium-java:4.6.0') { exclude group: 'com.google.guava', module: 'guava' } implementation 'com.google.guava:guava:31.1-jre'排查并解决依赖冲突
执行依赖树命令查看所有引入的Guava版本:- Maven:
mvn dependency:tree - Gradle:
./gradlew dependencies
找到引入低版本Guava的依赖,针对性排除该依赖中的Guava。
- Maven:
彻底清理依赖缓存并重新构建
执行清理命令后重新构建项目,确保旧依赖被完全替换:- Maven:
mvn clean install -U - Gradle:
./gradlew clean build --refresh-dependencies
- Maven:
确认Selenium与Guava版本兼容性
参考Selenium 4.6.0官方文档,确认推荐搭配的Guava版本,避免版本不兼容问题。
内容的提问来源于stack exchange,提问作者TTDS
相关产品推荐
相关产品推荐

