升级Selenium3.3.1与Firefox56后,Geb Spock无法指定语言启动火狐加载URL
解决Selenium 3.3.1 + Firefox 56 + Geb Spock的测试启动故障
嘿,这个问题我之前帮不少人排查过,核心原因其实是Selenium 3.x版本的一个重大变化——它不再内置Firefox的原生驱动了!你之前用的Selenium 2.52.0依赖的是旧版FirefoxDriver,升级到3.3.1后必须搭配Mozilla官方的GeckoDriver才能让Firefox正常工作,这就是浏览器能启动但加载不了URL的关键原因。
下面给你一步步的解决方案:
1. 搞定GeckoDriver的版本匹配
Firefox 56得搭配对应的GeckoDriver版本,我亲测v0.19.1和它最兼容,也适配Selenium 3.3.1。下载后解压到本地一个固定目录,比如Linux/Mac的/usr/local/bin,或者Windows的C:\drivers,记得给Linux/Mac下的驱动加执行权限(chmod +x geckodriver)。
2. 修改你的GebConfig.groovy配置
把原来的Firefox驱动配置替换成GeckoDriver的配置,示例如下:
import org.openqa.selenium.firefox.FirefoxDriver import org.openqa.selenium.firefox.FirefoxOptions // 全局驱动配置 driver = { // 这里替换成你实际的GeckoDriver路径,如果已经加到系统PATH里可以去掉这行 System.setProperty('webdriver.gecko.driver', '/usr/local/bin/geckodriver') // 配置Firefox选项,适配56版本 def firefoxOptions = new FirefoxOptions() // 如果你的Firefox不在默认安装路径,加上这行指定路径 // firefoxOptions.setBinary('/Applications/Firefox.app/Contents/MacOS/firefox') new FirefoxDriver(firefoxOptions) } // 也可以按环境拆分配置,更灵活 environments { firefox { driver = { // 用环境变量配置驱动路径,方便不同机器共享配置 System.setProperty('webdriver.gecko.driver', System.getenv('GECKO_DRIVER_PATH')) new FirefoxDriver(new FirefoxOptions()) } } // 其他浏览器(比如Chrome)的配置可以保持不变 chrome { // 你的Chrome驱动配置 } }
3. 检查构建依赖是否正确
确保你的构建文件(Gradle或Maven)里引入了正确的Selenium依赖,比如Gradle:
dependencies { testCompile 'org.codehaus.geb:geb-spock:2.0' testCompile 'org.spockframework:spock-core:1.3-groovy-2.5' testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:3.3.1' testCompile 'org.seleniumhq.selenium:selenium-support:3.3.1' }
4. 常见坑点排查
- 如果还是加载不了URL,先看控制台错误日志:要是出现
Connection refused,十有八九是GeckoDriver路径写错了,或者没给执行权限 - 手动启动GeckoDriver试试,如果能正常运行,说明驱动本身没问题,问题出在配置上
- 别乱换GeckoDriver版本,Selenium 3.3.1+Firefox56就用v0.19.1,版本不匹配会出各种奇怪的问题
内容的提问来源于stack exchange,提问作者Durgesh
相关产品推荐
相关产品推荐

