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

使用Selenium-WebDriver与Spring Boot测试时应用加载失败问题

Spring Boot + Selenium WebDriver 测试加载失败问题

在使用Selenium-WebDriver与Spring Boot进行应用测试时,遇到应用加载失败的情况,具体表现为Spring容器创建WebDriver Bean时抛出NoSuchFieldError: Companion异常,导致测试无法正常运行。

Pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.8</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ksupwlt</groupId>
    <artifactId>stepcounttracker</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>stepcounttracker</name>
    <description>KSU Patient Weight Loss Tracker</description>
    <properties>
        <java.version>11</java.version>
        <selenium.version>3.141.59</selenium.version>
        <webdrivermanager.version>4.3.1</webdrivermanager.version>
        <testng.version>7.7.1</testng.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>1.6.14 </version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- WebDriverManager -->
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>${webdrivermanager.version}</version>
        </dependency>

        <!-- Selenium Java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.version}</version>
        </dependency>

        <!-- TestNG -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.8</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <includes>
                        <include>com.ea.SpringBasic.SpringTestNGTest</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

WebDriver配置类

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WebDriverLibrary {

    @Bean
    public WebDriver getChromeDriver(){
        WebDriverManager.chromedriver().setup();
        return new ChromeDriver();
    }
}

MainPage页面类

import org.openqa.selenium.WebDriver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MainPage {
    @Autowired
    private LandingPage landingPage;

    @Autowired
    private LoginPage loginPage;

    @Autowired
    private SignUpPage signUpPage;

    @Autowired
    private QuestionnairePage questionnairePage;

    @Autowired
    private UserProfilePage userProfilePage;

    @Value("${app.url}")
    private String appUrl;

    @Value("chrome")
    private String browser;

    @Autowired
    private WebDriver webDriver;

    public void PerformLogin(){
        webDriver.navigate().to(appUrl);
        System.out.println(appUrl);
        landingPage.ClickLetStart();
        loginPage.ClickLogin();
    }
}

测试类

@SpringBootTest
class StepcounttrackerApplicationTests {

    @Autowired
    private MainPage mainPage;

    @Test
    void contextLoads() {
        mainPage.PerformLogin();
        mainPage.EditUserProfile();
        mainPage.PerformSignup();
        mainPage.SubmitQuestion();
    }
}

错误信息

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为'mainPage'的Bean时依赖不满足,其webDriver字段存在依赖问题;嵌套异常为org.springframework.beans.factory.BeanCreationException: 创建类路径资源[com/ksupwlt/stepcounttracker/libraries/WebDriverLibrary.class]中定义的'getChromeDriver' Bean失败;嵌套异常为org.springframework.beans.BeanInstantiationException: 实例化[org.openqa.selenium.WebDriver]失败;工厂方法'getChromeDriver'抛出异常;嵌套异常为java.lang.NoSuchFieldError: Companion
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
    at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:136)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90)
    ... 71 more

解决方法

这个NoSuchFieldError: Companion异常核心原因是WebDriverManager与Selenium版本不兼容:

  1. 调整依赖版本匹配
    WebDriverManager 4.3.1适配的是Selenium 4.x系列,而当前使用的Selenium 3.141.59属于旧版本,两者存在API差异。可以二选一调整:

    • 升级Selenium到兼容版本(比如4.1.4),修改pom.xml中的版本配置:
      <properties>
          <java.version>11</java.version>
          <selenium.version>4.1.4</selenium.version>
          <webdrivermanager.version>4.3.1</webdrivermanager.version>
          <testng.version>7.7.1</testng.version>
      </properties>
      
    • 或者降级WebDriverManager到适配Selenium 3的版本(比如3.8.1)。
  2. 优化WebDriver Bean作用域
    测试场景下,WebDriver作为单例Bean会在容器启动时提前初始化浏览器,建议将其作用域改为prototype,每次注入都创建新实例:

    @Configuration
    public class WebDriverLibrary {
    
        @Bean
        @Scope("prototype")
        public WebDriver getChromeDriver(){
            WebDriverManager.chromedriver().setup();
            return new ChromeDriver();
        }
    }
    

内容的提问来源于stack exchange,提问作者Santhiya s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:02:06