首先感谢作者的开源项目,作为第一批用户,看着Sonic 越来越完善,很开心,同时给自己的工作也带来很多便利。目前我司主要业务都是flutter 写的,目前还遇到一些问题,大概讲一下自己使用体会。
一 、Flutter 自动化痛点
- 元素定位能力弱,外部获取元素方式不同,appuim inspect 功能去 dump 页面元素时发现很多元素会被合并成一个区域块。
- 元素布局嵌套路径深。
- flutter的快速开发,需持续更新,随着android、ios等系统更新也会带来一些兼容性问题。
- 官方提供flutter driver、integration test 对混合栈 支持不成熟
不能批量操作元素,一旦 finder 定位到的元素超过 1 个时,就会抛出异常。
熟悉dart编程,结合源码去写脚本,代码维护成本比较高(类似Espresso)
官方已经放弃维护flutter driver
二 、解决方案
目前了解到的部分使用airtest ,通过图像识别,来定位校验。 个人觉得过于依赖图像识别,运行效率以及准确度都差强人意。 另一种方式:借助原生框架如 uiautomator2、 wda 的原生定位能力, 获取name xpath label id test classname , 获取不到的使用图像识别技术弥补。sonic 是很好的选择。

三 、实际应用中遇到的问题
元素嵌套路径过深,xpath 绝对路径太长,相对路径不易维护
通过xpath获取到输入框可以点击,无法填充内容
dump 页面元素时发现很多元素会被合并成一个区域块
第一个问题,跟开发讨论过,直接加key,没有效果。 目前在控件中 增加 semantics label 可以给控件增加唯一标识信息。 但是这个标识只会显示在 content-desc里。 目前还没找到可以添加到resource-id 或者其它字段的方法。目前已经给作者提了需求,来获取content-desc 内容去校验结果。
第二个问题,本来以为是appium 的问题,后来发现是flutter版本过低,当时用的2.5 吧貌似, 后面升级到最新版本就可以解决了,看来flutter也再不断的去适应大众需求。
第三个问题,目前还没解决,不知道包一层semantics 是否可以,后续再让开发调试看看。
四、结合sonic的 使用感受
目前整体来说,点击处理基本没什么问题, 校验结果还需要Sonic支持更多的功能。 还是希望未来sonic 能有更好的方案来对接flutter应用的测试。 大家再使用过程中有什么好的方法,也可以留言交流学习一下,或者未来能有个flutter 板块😄
结果校验,希望sonic 可以增加多些的支持:
- 添加校验content-desc 的内容,增加包含或者相等的判断来验证结果(flutter 通过label加自定义标识只会显示在desc),目前验证操作里只有验证文本; 控件元素操作是不是也加一个 获取content-desc
- 截图来验证结果,目前是整页截图,希望也能做到包含关系,做结果验证。
- 公共步骤里面可以增加搜索,步骤太多了不好找。
- 随机事件目前对flutter 应用效果没原生monkey体验好,我这边现象是点击间隔时间很长,500毫秒原生就会很快, 第二个就是固定重复点击一块区域,比如长按时间基本在屏幕中心出现,几乎全程在一个页面,很少能点到其它页面,不知道是不是我权重配置有问题,或着是flutter获取控件的问题导致?。 第三就是 测试用例的强制终止无法使用
- 坐标修正。我们以前有开发根据屏幕分辨率做了一个相对坐标,这样面对不同大小的手机屏幕,一组坐标可以点击了
- 性能数据收集,我跑完随机事件后,可以有一些cpu,内存之类的数据展示。