天天看點

關于Android的Accessibility--測試

測試

人工測試

目前的手動測試都是基于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:

  1. 進入 Talkback Settings > Developer settings
  2. 啟用節點樹調試功能. 設定日志level為verbose
  3. 找一下選項,開啟需要記錄的手勢操作(官方文檔還是設定選項,有個管理手勢;但是我看的兩個手機都在開發者選項,有個過濾手勢記錄)
  4. 開啟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項目中找到(原連結目錄已不存在,未确認)