Maven化TestNG项目出现ChromeDriver AbstractMethodError问题求助
问题描述
将现有项目转为Maven项目后,已引入selenium-java、selenium-server、selenium-chrome-driver、TestNG及JUnit等依赖,运行TestNG项目时出现以下错误:
Exception in thread "main" java.lang.AbstractMethodError: Receiver class org.openqa.selenium.chrome.ChromeDriverService$Builder does not define or inherit an implementation of the resolved method 'abstract void loadSystemProperties()' of abstract class org.openqa.selenium.remote.service.DriverService$Builder. at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:504) at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:162) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:52)
当前引入的Maven依赖如下:
<dependencies> <!-- selenium-java --> <dependency> <groupId>org.openqa.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.10.0</version> </dependency> <!-- selenium-server --> <dependency> <groupId>org.openqa.selenium</groupId> <artifactId>selenium-server</artifactId> <version>3.9.0</version> </dependency> <!-- selenium-chrome-driver --> <dependency> <groupId>org.openqa.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>4.9.0</version> </dependency> <!-- TestNG --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.3.0</version> <scope>test</scope> </dependency> <!-- JUnit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.6</version> <scope>test</scope> </dependency> <!-- selenium-support --> <dependency> <groupId>org.openqa.selenium</groupId> <artifactId>selenium-support</artifactId> <version>4.10.0</version> </dependency> <!-- webdriver-expected-conditions --> <dependency> <groupId>ru.stqa.selenium</groupId> <artifactId>webdriver-expected-conditions</artifactId> <version>1.0.41</version> </dependency> </dependencies>
代码中初始化ChromeDriver的逻辑:
System.setProperty("webdriver.chrome.driver", "path"); WebDriver driver = new ChromeDriver();
解决方案
这个错误的核心原因是Selenium各组件版本不一致,不同版本的类定义不兼容,导致抽象方法找不到实现。具体来说,selenium-server使用了3.9.0的旧版本,而其他Selenium核心组件是4.x版本,版本混乱引发方法签名不匹配。
1. 统一所有Selenium组件的版本
将所有org.seleniumhq.selenium下的依赖版本统一为同一个稳定版本(推荐使用4.10.0),同时简化依赖:
selenium-java已经包含了selenium-chrome-driver、selenium-support等核心组件,无需单独引入;- Selenium4中已整合旧版
selenium-server的功能,无需单独引入该依赖。
修正后的依赖如下:
<dependencies> <!-- Selenium核心依赖,包含所有必要组件 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.10.0</version> </dependency> <!-- TestNG测试框架 --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.3.0</version> <scope>test</scope> </dependency> <!-- JUnit(如需兼容JUnit测试,建议升级到稳定新版本) --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <!-- 第三方预期条件扩展(如仍需使用) --> <dependency> <groupId>ru.stqa.selenium</groupId> <artifactId>webdriver-expected-conditions</artifactId> <version>1.0.41</version> </dependency> </dependencies>
2. 优化ChromeDriver初始化逻辑
Selenium 4.6+版本已内置WebDriverManager,无需手动设置webdriver.chrome.driver系统属性,可简化代码为:
WebDriver driver = new ChromeDriver();
若需指定驱动路径,需确保驱动版本与Chrome浏览器版本匹配,推荐使用WebDriverManager自动管理驱动版本。
3. 清理依赖并重构项目
- 移除重复、不必要的依赖;
- 执行
mvn clean install清理旧依赖缓存,重新构建项目。
内容的提问来源于stack exchange,提问作者Param Radadiya
相关产品推荐
相关产品推荐

