Selenium搭配geckodriver运行火狐测试后出现Stopped listening on port错误如何解决
Selenium Firefox驱动销毁阶段报错解决方案
报错成因
- 核心触发原因是
@AfterMethod中重复执行了驱动关闭逻辑:driver.close()的作用是关闭当前处于激活状态的浏览器窗口,当浏览器仅剩余一个窗口时,调用close()会直接启动浏览器进程的销毁流程,火狐内置的Marionette控制组件会先停止端口监听,内部的RemoteSettingsWorker线程也会进入销毁状态。此时紧接着执行的driver.quit()会向已经启动销毁流程的浏览器进程再次发送退出指令,触发已关闭的组件抛出无法导入资源的错误,同时触发IPC通信层的警告。 - 该报错属于浏览器销毁阶段的时序冲突日志,不会影响测试用例的实际执行结果,为非致命的警告类输出。
排查处理方案
- 修正驱动关闭逻辑:删除多余的
driver.close()调用,仅保留driver.quit()即可。quit()方法本身会自动关闭所有打开的浏览器窗口、终止浏览器进程并释放驱动所有占用资源,无需提前调用close()。可增加非空判断避免空指针异常,修正后代码如下:
@AfterMethod public void quitDriver() { if (driver != null) { driver.quit(); } }
- 屏蔽无关日志:如果调整关闭逻辑后仍有残留警告输出且不希望在控制台显示,可在FirefoxOptions中添加配置项关闭RemoteSettings相关日志:
FirefoxOptions options = new FirefoxOptions(); options.setCapability("marionette", true); // 新增以下配置屏蔽冗余日志 options.addPreference("dom.remoteSettings.enabled", false); options.addPreference("devtools.console.stdout.content", false); driver = new FirefoxDriver(options);
- 确认环境版本匹配:你当前使用的Firefox 90.0.2(32-bit)与Geckodriver 0.29.1 Win32为官方匹配的版本组合,不存在版本兼容问题,无需调整版本。若后续升级浏览器版本,需对应升级Geckodriver到适配的版本即可。
- 排查用例资源冲突:如果调整关闭逻辑后仍复现报错,检查是否存在多个测试用例共享同一个driver实例的情况,避免出现一个用例已经销毁driver后,其他用例仍在调用driver执行操作的时序问题。
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

