測試
人工測試
目前的手動測試都是基于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項目中找到(原連結目錄已不存在,未确認)