UI Testing Framework構成的重要類:shell
UiTestAutomationBridge ide
這是整個Testing Framework的基礎,此類負責鏈接系統了,記錄最新的可連接事件(AccessibilityEvent) , 窗口內容查詢Api等。能夠被Android App調用,或者Java程序從shell調用。函數
這裏須要注意兩個概念:測試
一、AccessibilityEvent:全部的Ui元素能夠被操縱,由於這些Event都是AccessibilityEvent。對於怎樣令頁面元素能夠被操縱,使得相關的事件都是AccessibilityEvent,請參見Uiautomator 詞條-"確認程序能夠被測試" 部分。
2、AccessibilityNodeInfo:視窗中的組件樹節點,也就是uiautomtorViewer中展現的各個節點。
Api中connect(), disconnect() 負責創建與設備的實際鏈接。
executeCommandAndWaitForAccessibilityEvent() performAccessibilityAction() findAccessibilityNodeInfosByText(), findAccessibilityNodeInfoByViewIdInActiveWindow() 都是其中重要的Api。ui
UiAutomatorBridge spa
UiAutomatorBridge是UiTestAutomationBridge的子類,區別主要是在構造函數中加上了InteractionController 和QueryController 兩大對象的調用。以及一些常量定義等。除了上述差別,UiAutomatorBridge還定義了executeCommandAndWaitForAccessibilityEvent() 、onAccessibilityEvent() 、waitForIdle() 、addAccessibilityEventListener() 等函數。orm
InteractionController 對象
介紹InteractionController,須要先提InteractionProvider,它負責注入用戶事件(如點擊、輸入等) ,而且反應事件的對應座標。
InteractionController則定義了幾乎全部至於手機的基礎操做,如runAndWaitForEvents(), clickAndWaitForEvents() ,click(), longTap(), scrollSwipe(),Swipe() ,clickAndWaitForNewWindow() ,touchUp(), touchDown(), TouchMove() ,isNaturalRotation(), setRotationRight(), setRotationLeft() ,freezeRotation() ,wakeDevice(), sleepDevice() 等。事件
QueryController ip
QueryController負責把UiSelector 的查找信息轉化爲AccessibilityNodeInfo。
具體Api以下:findNodePatternRecursive(), translatePatternSelector(), translateReqularSelector(), translateCompoundSelector(), getRootNode() ,findAccessibilityNodeInfo()。
UiWatcher
UiWatcher只在UiSelector沒法找到匹配的結果時被調用,意在重試、等待頁面更新 (如彈出對話框)等。其中只有一個主要函數:checkForCondition() 。
它的相關函數均在UiDevice中,如:UiDevice.registerWatcher() ,UiDevice. resetWatcherTriggers() ,UiDevice.runWatchers() ,UiDevice.removeWatcher()