Selenium初始化Chrome/Firefox驱动时遇java.lang.AbstractMethodError异常
遇到的错误
Chrome驱动初始化错误
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.
Firefox驱动初始化错误
java.lang.AbstractMethodError: Receiver class org.openqa.selenium.firefox.GeckoDriverService$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.
问题背景
代码2个月前运行正常,近期突然报错。测试Chrome和Firefox浏览器时,无论是否使用WebDriver Manager初始化驱动,都会触发上述错误。初始化代码如下:
public static WebDriver initialization() { if (driver == null) { switch (propertyBrowserValue) { case "chrome": // System.setProperty(getPropertyInitializeValue(initFilePath, "chromeDriverName"), getPropertyInitializeValue(initFilePath, "chromeDriverPath")); // ChromeOptions options = new ChromeOptions(); // options.addArguments("--remote-allow-origins=*"); // driver = new ChromeDriver(options); WebDriverManager.chromedriver().setup(); driver = new ChromeDriver(); break; case "firefox": WebDriverManager.firefoxdriver().setup(); driver = new FirefoxDriver(); break; case "IE": WebDriverManager.iedriver().setup(); driver = new InternetExplorerDriver(); break; case "Edge": WebDriverManager.edgedriver().setup(); driver = new EdgeDriver(); break; default: System.out.println("You have not setup a correct browser " + "type in configuration file"); } } driver.manage().deleteAllCookies(); driver.manage().window().maximize(); return driver; }
原因分析
这个错误本质是依赖版本不兼容:Selenium核心库与浏览器驱动相关依赖(或WebDriver Manager)版本不匹配,导致抽象类DriverService$Builder新增的loadSystemProperties()方法在具体实现类中没有对应实现。
常见触发场景:
- 依赖管理工具(Maven/Gradle)自动拉取了更新后的Selenium核心库(比如使用了范围版本或快照版本)
- 手动升级Selenium核心版本后,未同步更新WebDriver Manager或浏览器驱动依赖
解决方案
1. 统一Selenium与WebDriver Manager版本
确保两者版本完全兼容,推荐组合:
- Selenium 4.x 搭配 WebDriver Manager 5.x 及以上版本
- Selenium 3.x 搭配 WebDriver Manager 4.x 版本
以Maven为例,在pom.xml中锁定固定版本:
<!-- Selenium核心依赖 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.15.0</version> </dependency> <!-- WebDriver Manager依赖 --> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.6.0</version> </dependency>
2. 排查并解决依赖冲突
检查项目依赖树,找出版本不一致的Selenium子模块(如selenium-remote-driver、selenium-chrome-driver)并排除冲突。
Maven查看依赖树命令:
mvn dependency:tree
找到冲突依赖后,在对应依赖节点中添加exclusions排除旧版本。
3. 手动指定驱动版本(可选)
若WebDriver Manager自动拉取的驱动与浏览器版本不兼容,可手动指定驱动版本:
// Chrome指定具体驱动版本 WebDriverManager.chromedriver().driverVersion("119.0.6045.105").setup(); // Firefox指定具体驱动版本 WebDriverManager.firefoxdriver().driverVersion("0.33.0").setup();
4. 清理本地依赖缓存
本地缓存的依赖包可能损坏,清理后重新拉取:
- Maven:删除
~/.m2/repository/org/seleniumhq/selenium和~/.m2/repository/io/github/bonigarcia目录 - Gradle:删除
~/.gradle/caches中对应Selenium和WebDriver Manager的缓存目录
内容的提问来源于stack exchange,提问作者Suresh Madhusanka Rodrigo

