Selenium 4.4调用WebDriverWait构造方法出现NoSuchMethodError问题排查
问题原因及解决办法
你的代码:
WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(10));
报错信息:
Exception in thread "main" java.lang.NoSuchMethodError: 'void org.openqa.selenium.support.ui.WebDriverWait.<init>(org.openqa.selenium.WebDriver, java.time.Duration)' at com.web.Power.Web.Webproject.<init>(Webproject.java:82)
出现这个错误的核心原因是JVM找不到对应的WebDriverWait构造方法,具体可能有以下几种情况:
- Selenium依赖版本不统一:
WebDriverWait属于selenium-support模块,接收java.time.Duration参数的构造方法是Selenium 4.x才新增的。如果你的项目中selenium-support版本低于4.0,或者和selenium-java的版本不一致(比如selenium-java用4.4,但selenium-support是3.x),就会触发该错误。 - Classpath存在旧版本Selenium包:若项目类路径中同时存在Selenium 3.x和4.x的Jar包,JVM可能优先加载旧版本的
WebDriverWait类,而旧版本仅支持传入long类型的超时时间,没有适配Duration的构造方法。 - 依赖引入不完整或缓存异常:构建工具(如Maven/Gradle)可能未正确下载Selenium 4.4的完整依赖,或者本地依赖缓存中存在损坏/旧版本的包,导致
selenium-support模块缺失或版本错误。
对应的解决办法:
- 统一Selenium依赖版本:确保所有Selenium相关依赖的版本都是4.4.0。以Maven为例,只需引入
selenium-java即可(它已包含selenium-support),配置如下:
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.4.0</version> </dependency>
如果单独引入了selenium-support,必须保证其版本与selenium-java完全一致。
清理并重新下载依赖:删除本地依赖缓存(比如Maven的
~/.m2/repository/org/seleniumhq/selenium目录,Gradle的~/.gradle/caches/modules-2/files-2.1/org.seleniumhq.selenium目录),然后重新执行构建命令(mvn clean install或gradle clean build)。检查并清理Classpath:移除项目中所有Selenium 3.x版本的Jar包,确保类路径中仅保留Selenium 4.4.0的相关包。
内容的提问来源于stack exchange,提问作者Clone
相关产品推荐
相关产品推荐

