测试
人工测试
目前的手动测试都是基于TalkBack测试,先开启TalkBack。
软件方式:通过快速左滑或者右滑来进行元素切换,通过移动触摸屏幕来聆听提示,通过双击来选择元素。
硬件方式:一个开关对应“Next”–点击来移动焦点;一个开关对应“Select”–点击来选择聚焦的元素。
主要的测试方向:
- 声音反馈是否合适,弹窗或临时信息的声音要更大一些
- 整体流程是否流畅
- 只靠滑动是否就能把所有元素遍历
- 可以执行action的元素是否都有高亮
- 文本的添加和修改是否简便
- Spoken feedback的文字是否简洁明了
分析工具
分析工具的主要目的是用来补充人工测试忽略的部分。
- Accessibility Scanner:基于Accessibility框架,用于分析内容标签、可点击元素、颜色对比度等,来给与提升建议。
- Node Tree Debugging:让人更直观的看到Accessibility services的结构形式,有助于分析。
- UI Automator Viewer:这个工具可以提取view的可见的展示结构,显示id及文本,有助于纠错
- Lint: 用于提示contentDescription的缺失
自动化测试
Espresso :
//开启检测,只要有ViewActions中的操作,就会被执行
AccessibilityChecks.enable();
//从根目录检测
AccessibilityChecks.enable().setRunChecksFromRootView(true);
//忽略已知的一些问题,方便后续一起修复
AccessibilityValidator validator = AccessibilityChecks.enable();
Matcher<AccessibilityViewCheckResult> myMatcher =
allOf(
matchesCheckNames(is("TouchTargetSizeViewCheck")),
matchesViews(withId(R.id.my_overflow)));
validator.setSuppressingResultMatcher(myMatcher);
Robolectric:
Robolectric在UI测试上有些短板,比如不能得到触摸目标的大小、不能获取duplicate clickable items。但是可以通过其他工具配合获取,比如Accessibility Scanner
//忽略已知问题
http://robolectric.org/javadoc/3.1/org/robolectric/util/AccessibilityUtil.html#setSuppressingResultMatcher(org.hamcrest.Matcher)
Node Tree Debug
node tree debugging 是用来测试的方法。
accessibility services对于ui的解释和app的不太一样,所以需要类似的表现形式来让人更好的调试。这个形式就是node tree debugging
在accessibility services中,一个窗口的所有内容会被解析成AccessibilityNodeInfo树,树上每个节点都包含一系列的AccessibilityAction,而每个action则对应了focusable或者clickable之类信息
注意节点顺序和view的节点顺序不一定一样;LinearLayout会被解释成FrameLayout
开启node tree debugging:
- 进入 Talkback Settings > Developer settings
- 启用节点树调试功能. 设置日志level为verbose
- 找一下选项,开启需要记录的手势操作(官方文档还是设置选项,有个管理手势;但是我看的两个手机都在开发者选项,有个过滤手势记录)
- 开启TalkBack
单纯的开启TalkBack会弹出一个说明窗,再点击确定会说权限窗口被覆盖,然后就只能关闭</>
然后输入$ adb logcat
,打开app并操作手势就可以看到输出了
疑问:$ adb logcat -s TreeDebug
并没有输出
如果有的话会看到起点坐标、长宽、文字、标签描述、以及支持的action,是否被选择等:
V TreeDebug: (-2147450924)81.CheckBox:(56, 336 - 1384, 448):Hi, I'm a checkbox!:Testing a:FAC:( ):focusable:clickable
action对应:
ACTION_FOCUS (“F”)
ACTION_ACCESSIBILITY_FOCUS (“A”)
ACTION_CLICK (“C”)
更多对应关系可以在github上的goolel/talkback项目中找到(原链接目录已不存在,未确认)