Spring Boot项目中Selenium的getDevTools方法无法解析问题排查
问题描述
我有两个不同的Maven项目,都包含以下Java类:
import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.devtools.DevTools; import org.openqa.selenium.devtools.v95.network.Network; import java.util.ArrayList; import java.util.List; import java.util.Optional; public class CrawlingLinks { public static List<String> crawlingLinks(String url) { List<String> urls = new ArrayList<>(); System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\ChromeDriver\\chromedriver.exe"); ChromeDriver driver = new ChromeDriver(); DevTools devTools = driver.getDevTools(); devTools.createSession(); devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty())); devTools.addListener(Network.requestWillBeSent(), entry -> { urls.add(entry.getRequest().getUrl()); }); driver.get(url); driver.quit(); return urls; } }
其中一个项目运行正常,但另一个项目在第18行报错:
The 'getDevTools' method cannot be resolved in 'ChromeDriver'
报错项目的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 http://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.3.11.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>-</groupId> <artifactId>-</artifactId> <version>0.0.1-SNAPSHOT</version> <description>111</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20210307</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>central</id> <url>https:/repositories/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>https:/repositories/</url> </pluginRepository> </pluginRepositories> </project>
正常项目的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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>For_Tests</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>central</id> <url>https:repositories</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>hrepositories/</url> </pluginRepository> </pluginRepositories> </project>
我使用JDK 11,已经意识到问题出在parent标签上,请问问题是什么?该如何修复?
问题原因及修复方案
原因
Spring Boot 2.3.11.RELEASE的父POM中,默认管理的Selenium版本低于4.0.0。尽管你显式声明了selenium-java 4.0.0,但Spring Boot的依赖管理机制会优先使用父POM中定义的版本,导致实际引入的Selenium版本没有getDevTools()方法——这个方法是Selenium 4.x才新增的。
修复方案
有两种可行的修复方式:
方式一:显式覆盖Selenium版本(推荐)
在报错项目的pom.xml的<properties>节点中添加Selenium版本属性,强制使用你指定的4.0.0版本:
<properties> <java.version>11</java.version> <selenium.version>4.0.0</selenium.version> </properties>
方式二:升级Spring Boot父版本
将Spring Boot parent版本升级到支持Selenium 4.x的版本(比如2.6.x及以上),这类版本的依赖管理中默认包含适配的Selenium版本。但注意,升级父版本可能会引发其他依赖的兼容性问题,需要全面测试验证。
完成修改后,执行mvn clean install重新构建项目,确保依赖正确更新。
内容的提问来源于stack exchange,提问作者Ever Last
相关产品推荐
相关产品推荐

