如何解决Selenium中ImmutableMap.of方法缺失的NoSuchMethodError?
问题解决:Selenium报错NoSuchMethodError(Guava版本冲突)
一、报错根本原因
你遇到的java.lang.NoSuchMethodError和坐标点击代码无关,本质是Guava版本不兼容:
- Selenium内部依赖Guava库,你的项目中引入的Guava版本与Selenium所需版本不一致,导致找不到
ImmutableMap.of的对应重载方法。
二、解决步骤
1. 匹配Selenium与Guava版本
不同Selenium版本对应特定的Guava版本,参考对应关系(举例):
- Selenium 3.x:推荐Guava 28.0-jre及以下
- Selenium 4.x:推荐Guava 30.1-jre及以上
2. 修复依赖冲突
Maven项目
- 方法一:通过
dependencyManagement强制指定Guava版本,覆盖所有依赖的版本:
<dependencyManagement> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1-jre</version> <!-- 替换为你的Selenium对应的版本 --> </dependency> </dependencies> </dependencyManagement>
- 方法二:排查并排除其他依赖引入的旧版Guava:
执行mvn dependency:tree查看依赖树,找到引入旧Guava的依赖,在其依赖配置中添加排除:
<dependency> <groupId>[冲突依赖的groupId]</groupId> <artifactId>[冲突依赖的artifactId]</artifactId> <version>[版本号]</version> <exclusions> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency>
Gradle项目
在build.gradle中强制指定Guava版本:
configurations.all { resolutionStrategy.force 'com.google.guava:guava:30.1-jre' // 替换为对应版本 }
三、修正坐标点击代码(额外优化)
你原来的坐标点击逻辑存在错误:moveToElement(internTab)已将鼠标移到元素上,再调用moveByOffset(x,y)会让鼠标移动到元素位置+元素绝对坐标的位置,大概率偏离目标元素。直接简化点击逻辑即可:
// 方式1:直接点击元素 internTab.click(); // 方式2:用Actions点击(适合需要悬停的场景) Actions actions = new Actions(driver); actions.moveToElement(internTab).click().perform();
内容的提问来源于stack exchange,提问作者Anupam Krishna
相关产品推荐
相关产品推荐

