Eclipse中运行Selenium FirefoxDriver代码报NoSuchMethodError求助
问题排查与解决方案
我来帮你搞定这个问题!你遇到的java.lang.NoSuchMethodError本质是依赖版本不兼容,再加上Firefox驱动的配置问题,咱们一步步来解决:
1. 先搞定Firefox和GeckoDriver、Selenium的版本匹配
你的Firefox是61.0b4(Beta版),得搭配对应的工具版本才行:
- Selenium版本必须是3.12.0及以上,旧版本的Selenium对这个Firefox版本支持不好
- 下载对应版本的GeckoDriver:建议选v0.21.0及以上的版本,和Firefox 61兼容
- 配置GeckoDriver路径:
- 要么在代码里指定绝对路径:
System.setProperty("webdriver.gecko.driver", "你的GeckoDriver文件路径,比如Windows下是C:/tools/geckodriver.exe,Mac是/usr/local/bin/geckodriver"); FirefoxDriver driver = new FirefoxDriver(); - 要么把GeckoDriver所在的文件夹添加到系统的
PATH环境变量里,这样代码里就不用手动指定了
- 要么在代码里指定绝对路径:
2. 解决Guava库的版本冲突
报错里提到的com.google.common.base.Preconditions.checkState方法,在旧版Guava里是没有的,而Selenium 3.x需要的Guava版本是23.0及以上:
- 如果你的项目用Maven/Gradle管理依赖,直接把Guava的版本指定为23.0+,还要注意排除掉其他依赖带进来的旧版Guava
- 如果是手动导jar包的话:
- 先去项目的构建路径里删掉旧的Guava jar
- 下载一个兼容的新版本(比如guava-28.1-jre.jar),添加到项目的依赖里
3. 优化你的代码(可选但推荐)
建议用通用的WebDriver接口而不是具体的FirefoxDriver实现,另外记得最后关闭浏览器,避免残留进程:
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class TestBrowsers { public static void main(String[] args) { // 先设置GeckoDriver路径 System.setProperty("webdriver.gecko.driver", "path/to/your/geckodriver"); WebDriver driver = new FirefoxDriver(); try { // 可以加个测试网址,验证是否能正常打开 driver.get("https://www.example.com"); System.out.println("浏览器打开成功!"); } finally { // 不管执行结果如何,都关闭浏览器 driver.quit(); } } }
4. 检查Eclipse的构建路径
最后再确认下Eclipse里的依赖有没有问题:
- 右键项目 →
Build Path→Configure Build Path - 切换到
Libraries标签,看看Selenium和Guava的jar是不是都是咱们需要的版本,有没有重复的旧jar混在里面 - 如果有旧版本的jar,右键点
Remove删掉就行
按照这几步操作下来,应该就能顺利启动Firefox浏览器啦!
内容的提问来源于stack exchange,提问作者user2901858
相关产品推荐
相关产品推荐

