如何解决Selenium WebDriver中ByteStreams的java.lang.NoClassDefFoundError?
已下载Selenium 4.13.0并添加到项目库中,搭配ChromeDriver 117.0.5938.150,运行以下代码时出现NoClassDefFoundError错误:
package Selenium; import org.openqa.selenium.chrome.ChromeDriver; public class learning { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Users\\benis\\Desktop\\eclipse\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe"); ChromeDriver driver = new ChromeDriver(); driver.get("https://www.facebook.com"); } }
报错信息
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/io/ByteStreams
at org.seleniumhq.selenium.remote_driver/org.openqa.selenium.remote.service.DriverService$Builder.parseLogOutput(DriverService.java:472)
at org.seleniumhq.selenium.chrome_driver/org.openqa.selenium.chrome.ChromeDriverService$Builder.loadSystemProperties(ChromeDriverService.java:257)
at org.seleniumhq.selenium.remote_driver/org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:495)
at org.seleniumhq.selenium.chrome_driver/org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:137)
at org.seleniumhq.selenium.chrome_driver/org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:51)
at SeleniumTraining/Selenium.learning.main(learning.java:11)
Caused by: java.lang.ClassNotFoundException: com.google.common.io.ByteStreams
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
... 6 more
该错误源于项目缺失Guava依赖(com.google.common.io.ByteStreams属于Guava工具库),Selenium 4.x依赖特定版本的Guava,手动添加Selenium jar包时容易遗漏这类间接依赖。
具体解决步骤:
使用依赖管理工具(推荐)
如果用Maven,在pom.xml中添加Selenium依赖,会自动拉取所有必需的间接依赖:<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.13.0</version> </dependency>如果用Gradle,在
build.gradle中添加:implementation 'org.seleniumhq.selenium:selenium-java:4.13.0'重新构建项目即可自动下载缺失的Guava及其他依赖。
手动添加Guava jar包
若必须手动管理依赖,下载与Selenium 4.13.0兼容的Guava版本(推荐31.1-jre),添加到项目的库目录中。简化Driver初始化(可选)
Selenium 4.6+已支持自动管理Driver,无需手动设置webdriver.chrome.driver,可简化代码:package Selenium; import org.openqa.selenium.chrome.ChromeDriver; public class learning { public static void main(String[] args) { ChromeDriver driver = new ChromeDriver(); driver.get("https://www.facebook.com"); } }确保ChromeDriver版本与本地Chrome浏览器版本匹配即可。
内容的提问来源于stack exchange,提问作者ana

