Flutter integration test配合geckodriver在M1 macOS下Firefox运行失败
Flutter drive + geckodriver 运行异常解决方案
根因说明
问题由两部分兼容问题共同导致:
- Flutter 内置的 webdriver 组件默认调用 Chromium 系的非标准日志获取接口,geckodriver 遵循标准 W3C 协议不支持该接口,触发 405 方法不允许报错
- Firefox 的脚本执行时序与 Chrome 存在差异,
$flutterDriver方法执行完成后全局变量$flutterDriverResult未及时挂载,触发未定义报错
解决方案
方案一:匹配兼容版本(优先选择)
已验证可正常运行的版本组合:- Flutter 3.0 ~ 3.10 稳定版
- geckodriver v0.31.0
- Firefox 102.x ESR(长期支持版)
卸载当前安装的高版本 geckodriver、Firefox,替换为上述版本即可直接复用原有配置运行。
方案二:修改 Flutter SDK 适配代码
若需使用最新版 Firefox,可手动修改 Flutter 内置 driver 逻辑:- 打开本地 Flutter SDK 目录下的
packages/flutter_driver/lib/src/driver/web_driver.dart文件 - 注释掉调用
logs.get(LogType.browser)的相关代码段,规避不兼容的日志接口调用 - 在调用
window.$flutterDriver脚本后添加 300ms 延迟,适配 Firefox 的变量挂载时序,修改后参考代码:
await _webDriver.execute( "window.\$flutterDriver('${jsonEncode(request)}')", [], ); // 新增延迟适配Firefox时序 await Future.delayed(const Duration(milliseconds: 300)); final result = await _webDriver.execute( "return \$flutterDriverResult", [], );- 打开本地 Flutter SDK 目录下的
方案三:新增运行参数绕过
运行命令新增marionette端口指定参数,可绕过部分兼容问题,命令参考:flutter drive \ --driver=test_driver/integration_test.dart \ --target=integration_test/app_test.dart \ -d web-server --browser-name=firefox \ --browser-arguments='--marionette.port=2828'
内容的提问来源于stack exchange,提问作者Arkadiusz Kwiatkowski
相关产品推荐
相关产品推荐

