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

Selenium 4中EdgeOptions初始化报错:NoClassDefFoundError求助

问题:Selenium 4.x.x中使用EdgeOptions添加扩展时出现NoClassDefFoundError异常

使用Selenium 4.x.x版本,需求是通过EdgeOptions在运行脚本前为浏览器添加扩展,但始终抛出java.lang.NoClassDefFoundError: org/openqa/selenium/remote/AbstractDriverOptions异常,请求检查是否存在依赖版本不匹配或错误。

报错堆栈

Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.AbstractDriverOptions
        at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)

pom.xml依赖配置

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-api -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-api</artifactId>
        <version>4.1.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.1.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-chrome-driver</artifactId>
        <version>4.1.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chromium-driver -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-chromium-driver</artifactId>
        <version>4.1.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-edge-driver -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-edge-driver</artifactId>
        <version>4.1.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-remote-driver -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-remote-driver</artifactId>
        <version>3.4.0</version>
    </dependency>


    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
     
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-support</artifactId>
        <version>3.14.0</version>
    </dependency>
     
</dependencies>

Driver初始化代码

public static WebDriver initializeDriver() throws IOException {
        WebDriver driver = null;
        Properties prop = ConfigTestData.prop;
        String browser = prop.getProperty("proj.browser");
        if (browser.equalsIgnoreCase("Chrome")) {
            System.setProperty("webdriver.chrome.driver", prop.getProperty("proj.browser.driver.exe.path"));

            ChromeOptions opt = new ChromeOptions();
            opt.addArguments("--log-level=2");
            driver = new ChromeDriver(opt);  
        } else if (browser.equalsIgnoreCase("Edge")) {
            System.setProperty("webdriver.edge.driver", prop.getProperty("proj.browser.driver.exe.path"));
            EdgeOptions options = new EdgeOptions();

            driver = new EdgeDriver(options);//此处报错
        } else {
            System.out.println("Mentioned driver does not exist.Please set either chrome or MS edge");
        }
        return driver;
    }

解决方案

核心问题

异常的根本原因是Selenium依赖版本不统一:

  • selenium-remote-driver使用了3.4.0版本,而其他核心Selenium组件都是4.1.1
  • selenium-support使用了3.14.0版本,同样与4.1.1版本不兼容

AbstractDriverOptions是Selenium 4.x新增的类,低版本的selenium-remote-driver中不存在该类,导致类加载失败。

修复步骤

  1. 统一所有Selenium依赖版本:将selenium-remote-driver和selenium-support的版本改为4.1.1,与其他组件保持一致。
  2. 清理冗余依赖:selenium-java已经包含了selenium-api、selenium-chrome-driver、selenium-edge-driver等核心组件,无需单独引入这些依赖,可以删除以避免冲突。

修正后的pom.xml示例

<dependencies>
    <!-- 核心Selenium依赖,包含所有必需的组件 -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.1.1</version>
    </dependency>

    <!-- 测试相关依赖 -->
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>
  1. 清理并重建项目:执行mvn clean install命令,确保依赖正确下载并覆盖旧版本。

补充优化

Selenium 4.x推荐使用WebDriverManager自动管理驱动,无需手动设置System.setProperty,可以简化初始化代码:

import io.github.bonigarcia.wdm.WebDriverManager;

public static WebDriver initializeDriver() throws IOException {
        WebDriver driver = null;
        Properties prop = ConfigTestData.prop;
        String browser = prop.getProperty("proj.browser");
        if (browser.equalsIgnoreCase("Chrome")) {
            WebDriverManager.chromedriver().setup();
            ChromeOptions opt = new ChromeOptions();
            opt.addArguments("--log-level=2");
            driver = new ChromeDriver(opt);  
        } else if (browser.equalsIgnoreCase("Edge")) {
            WebDriverManager.edgedriver().setup();
            EdgeOptions options = new EdgeOptions();
            // 添加扩展:options.addExtensions(new File("path/to/extension.crx"));
            driver = new EdgeDriver(options);
        } else {
            System.out.println("Mentioned driver does not exist.Please set either chrome or MS edge");
        }
        return driver;
    }

需要添加WebDriverManager依赖到pom.xml:

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.3.0</version>
</dependency>

内容的提问来源于stack exchange,提问作者Sumit Soni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:39:21