Mac M2配置ChromeDriver遇java.lang.NoSuchMethodError问题求助
java.lang.NoSuchMethodError问题解决 错误日志
Exception in thread "main" java.lang.NoSuchMethodError: 'com.google.common.collect.ImmutableMap com.google.common.collect.ImmutableMap.of(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)'
at org.openqa.selenium.chrome.AddHasCasting.getAdditionalCommands(AddHasCasting.java:38)
at org.openqa.selenium.chrome.ChromeDriver$ChromeDriverCommandExecutor.getExtraCommands(ChromeDriver.java:98)
at org.openqa.selenium.chrome.ChromeDriver$ChromeDriverCommandExecutor.(ChromeDriver.java:93)
at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:81)
at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:49)
at org.example.lesson3.SeleniumStart.main(SeleniumStart.java:12)
POM配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>selenium_start</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>selenium_start</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.10.0</version> </dependency> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-report-plugin</artifactId> <version>3.0.0-M7</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.3.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> </dependencies> </project>
环境与代码情况
- 设备:Mac M2
- Chrome版本:107.0.5304.87
- ChromeDriver版本:107.0.5304.62(arm64)
- 两种测试代码均报错:
代码1:
代码2:System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver"); WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); driver.get("https://google.com"); driver.quit();System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver"); WebDriver driver = new ChromeDriver(); driver.get("https://google.com"); driver.quit();
解决方案
核心原因
该异常属于Guava版本冲突:Selenium 4.5.3依赖特定版本的Guava,手动添加Guava依赖或依赖排除操作导致项目引入了不兼容版本,进而出现方法找不到的错误。
具体修复步骤
调整POM依赖
- 移除手动添加的Guava依赖:
com.google.guava:guava:31.1-jre,让Selenium自带的兼容版本自动生效。 - 移除WebDriverManager中的Guava排除配置,避免依赖缺失或版本不匹配。
调整后的POM依赖部分:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.10.0</version> </dependency> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-report-plugin</artifactId> <version>3.0.0-M7</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.3.0</version> </dependency> </dependencies>- 移除手动添加的Guava依赖:
优化测试代码
WebDriverManager会自动下载、配置对应版本的ChromeDriver,无需手动设置webdriver.chrome.driver属性,简化后的代码:WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); driver.get("https://google.com"); driver.quit();清理并重新构建项目
执行Maven命令清理旧依赖并重新构建:mvn clean install -U
内容的提问来源于stack exchange,提问作者AGadzhiev

