使用WebDriverManager初始化Chrome时遇NoSuchMethodError问题求助
解决WebDriverManager初始化Chrome时的NoSuchMethodError问题
一、修复Apache HttpClient5依赖冲突
这个错误源于项目中引入的Apache HttpClient5版本与WebDriverManager依赖的版本不兼容,导致目标方法无法找到。解决步骤:
- 若使用Maven,执行
mvn dependency:tree查看依赖树,找出所有org.apache.httpcomponents.client5相关依赖,排除项目手动引入或其他依赖传递的不兼容版本,确保WebDriverManager自带的HttpClient5版本生效。 - 升级WebDriverManager至最新稳定版本(如5.x系列),保证其与Java 17、Chrome 118完全兼容。
二、优化WebDriver初始化代码
你的代码存在冗余调用和顺序问题,修正后代码如下:
@ExtendWith(MockitoExtension.class) public class BrowserTest { static WebDriver driver; @BeforeAll static void setupClass() { ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-allow-origins=*"); // WebDriverManager自动完成驱动配置与实例创建 driver = WebDriverManager.chromedriver() .capabilities(options) .create(); } @AfterAll // 静态驱动只需在所有测试结束后关闭一次 static void teardown() { if (driver != null) { driver.quit(); } } @Test public void test() { driver.get("https://bonigarcia.dev/selenium-webdriver-java/"); String title = driver.getTitle(); // 可添加断言验证,例如:Assertions.assertEquals("Selenium WebDriver with Java", title); } }
代码修正说明:
- 移除手动设置
webdriver.chrome.driver的代码,WebDriverManager会自动管理驱动路径与版本。 - 合并WebDriverManager的配置与实例创建步骤,通过
capabilities(options)传入Chrome配置,create()直接生成WebDriver实例。 - 将
@AfterEach改为@AfterAll,避免静态驱动被重复关闭引发异常。 - 添加driver空判断,防止未初始化时调用quit报错。
内容的提问来源于stack exchange,提问作者Pratiksha Junonkar
相关产品推荐
相关产品推荐

