You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter integration test配合geckodriver在M1 macOS下Firefox运行失败

Flutter drive + geckodriver 运行异常解决方案

根因说明

问题由两部分兼容问题共同导致:

  1. Flutter 内置的 webdriver 组件默认调用 Chromium 系的非标准日志获取接口,geckodriver 遵循标准 W3C 协议不支持该接口,触发 405 方法不允许报错
  2. Firefox 的脚本执行时序与 Chrome 存在差异,$flutterDriver 方法执行完成后全局变量 $flutterDriverResult 未及时挂载,触发未定义报错

解决方案

  • 方案一:匹配兼容版本(优先选择)

    已验证可正常运行的版本组合:
    • Flutter 3.0 ~ 3.10 稳定版
    • geckodriver v0.31.0
    • Firefox 102.x ESR(长期支持版)
      卸载当前安装的高版本 geckodriver、Firefox,替换为上述版本即可直接复用原有配置运行。
  • 方案二:修改 Flutter SDK 适配代码

    若需使用最新版 Firefox,可手动修改 Flutter 内置 driver 逻辑:
    1. 打开本地 Flutter SDK 目录下的 packages/flutter_driver/lib/src/driver/web_driver.dart 文件
    2. 注释掉调用 logs.get(LogType.browser) 的相关代码段,规避不兼容的日志接口调用
    3. 在调用 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",
      [],
    );
    
  • 方案三:新增运行参数绕过

    运行命令新增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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:57:01