Serenity测试框架无法实例化ChromeDriver问题求助
Serenity测试框架ChromeDriver实例化失败问题排查与解决
问题描述
运行Serenity测试类FirstTestCaseSerenity时抛出如下错误:
net.thucydides.core.webdriver.DriverConfigurationError: Could not instantiate class org.openqa.selenium.chrome.ChromeDriver at net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:181) // 省略中间栈跟踪信息 Caused by: java.lang.NoSuchMethodError: 'void com.google.common.base.Throwables.throwIfUnchecked(java.lang.Throwable)' at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:192) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:Thechookie89
测试代码如下:
@RunWith(SerenityRunner.class) public class FirstTestCaseSerenity { @Managed WebDriver driver @Test public void dologin() { System.out.println("Debugging: Start of the test"); if (driver== null) { throw new IllegalStateException("WebDriver is null. Please check Serenity configuration.) } System.out.println("Debugging: Chromedriver path - " + System.getProperty("webdriver.chrome.driver")); this.driver.get("https://google.com")} }
根本原因
java.lang.NoSuchMethodError: 'void com.google.common.base.Throwables.throwIfUnchecked(java.lang.Throwable)' 核心原因是Guava依赖版本冲突:
- Selenium 4.15.0需要特定版本的Guava(通常为31.1-jre或更高兼容版本)
- 项目中Serenity框架或其他依赖引入了旧版Guava,导致Selenium调用的方法在旧版库中不存在,触发方法找不到错误。
解决方法
1. 锁定Guava依赖版本
通过依赖管理工具强制使用与Selenium 4.15.0兼容的Guava版本:
- Maven:在
pom.xml的dependencyManagement节点添加:<dependencyManagement> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.1-jre</version> </dependency> </dependencies> </dependencyManagement> - Gradle:在
build.gradle中添加:configurations.all { resolutionStrategy.force 'com.google.guava:guava:31.1-jre' }
2. 确保Serenity与Selenium版本兼容
Serenity BDD版本需与Selenium版本匹配,建议使用Serenity 3.x系列(对应Selenium 4.x),避免版本不兼容引发的依赖冲突。
3. 修正测试代码语法错误
测试代码存在字符串未闭合、语法不完整问题,修正后:
@RunWith(SerenityRunner.class) public class FirstTestCaseSerenity { @Managed(driver = "chrome") WebDriver driver; @Test public void dologin() { System.out.println("Debugging: Start of the test"); if (driver == null) { throw new IllegalStateException("WebDriver is null. Please check Serenity configuration."); } System.out.println("Debugging: Chromedriver path - " + System.getProperty("webdriver.chrome.driver")); this.driver.get("https://google.com"); } }
- 给
@Managed注解指定driver="chrome",明确驱动类型 - 修复字符串闭合问题,补全分号等语法细节
4. 验证ChromeDriver与浏览器版本匹配
确保本地Chrome浏览器版本与ChromeDriver版本一致,Serenity默认会自动管理ChromeDriver,若手动指定路径需保证版本完全匹配。
内容的提问来源于stack exchange,提问作者vikas sudan
相关产品推荐
相关产品推荐

