Flutter2升级Flutter3后自动化测试时App启动即崩溃报错
问题现象
- 基于Webdriver.io、Appium、appium flutter driver搭建的自动化测试流程,在Flutter版本从2升级至3后,测试运行时App启动后立即崩溃
- 故障同时覆盖Android、iOS双平台的实体设备与模拟器设备,使用Flutter 2构建的App版本可正常运行,无崩溃问题
- 采用仅包含最少依赖的Flutter示例项目验证:升级至Flutter 3前项目自动化测试可正常运行,升级后完全复现前述相同报错
复现相关命令
App构建命令
flutter build apk --debug --target=./test_driver/build.dart
测试执行命令
npx wdio config/wdio.android.flutter.conf.js --spec tests/flutter_specs/app.test.spec.js
运行报错日志
DEBUG webdriver: request failed due to response error: unknown error ERROR webdriver: Request failed with status 500 due to unknown error: An unknown server-side error occurred while processing the command. Original error: Cannot read property 'match' of undefined ERROR webdriver: unknown error: An unknown server-side error occurred while processing the command. Original error: Cannot read property 'match' of undefined
已尝试排查操作
- 清理npm的node_modules目录与package-lock.json文件后重新安装依赖,问题未解决
当前依赖配置
package.json中的依赖配置如下:
"dependencies": { "@wdio/appium-service": "^6.1.16", "@wdio/cli": "^6.1.24", "@wdio/jasmine-framework": "^6.1.23", "@wdio/junit-reporter": "^7.5.3", "@wdio/local-runner": "^6.1.24", "@wdio/sauce-service": "^6.1.16", "@wdio/spec-reporter": "^6.1.23", "@wdio/sync": "^6.1.14", "appium": "^1.21.0", "appium-flutter-driver": "0.0.4", "appium-flutter-finder": "^0.1.0", "babel-eslint": "^10.1.0", "node-fetch": "^2.6.0", "webdriverio": "^6.1.24" }, "devDependencies": { "npm-bundle": "^3.0.3" }, "bundledDependencies": [ "@wdio/appium-service", "@wdio/cli", "@wdio/jasmine-framework", "@wdio/junit-reporter", "@wdio/local-runner", "@wdio/sauce-service", "@wdio/spec-reporter", "@wdio/sync", "babel-eslint", "node-fetch", "webdriverio" ]
根因与解决方案
报错核心原因是当前使用的0.0.4版本appium-flutter-driver完全不兼容Flutter 3的底层通信协议:
Flutter 3修改了Dart VM Service观测端口的返回格式、Flutter引擎内部的服务扩展注册逻辑,旧版本driver在解析端口信息时无法获取预期字段,直接抛出Cannot read property 'match' of undefined的空引用错误,导致App启动阶段driver连接失败,外在表现为App启动立即崩溃。
当前依赖栈存在明确的版本兼容断层,按以下步骤调整即可修复:
- 升级
appium-flutter-driver至1.8.0及以上版本,同步升级appium-flutter-finder至0.2.0及以上匹配版本,上述版本开始正式适配Flutter 3的协议解析逻辑 - 将Appium从1.x版本升级至2.x版本,1.0.0以上版本的appium-flutter-driver不再适配Appium 1.x分支
- 确认Flutter 3构建测试包时,入口
main函数中正常调用enableFlutterDriverExtension(),不要修改该扩展的默认端口配置 - 若暂时无法升级WebdriverIO大版本,可先将所有WDIO相关依赖锁定在6.x分支的最高补丁版本,验证基础连接能力;若仍存在接口兼容问题,再升级WDIO至7.x/8.x版本适配Appium 2.x的接口规范
注意:所有1.0版本以下的appium-flutter-driver发布时间均早于Flutter 3正式版,未做任何Flutter 3适配,无法正常连接Flutter 3构建的应用。
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

