You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium初始化Chrome/Firefox驱动时遇java.lang.AbstractMethodError异常

解决Selenium初始化Chrome/Firefox驱动时的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:34:57