目錄html
穿梭各大技術博客網站,天天都能看到一些的新的技術。忽然感受UiAutomator 2.0相對於如今來講已是個好久遠的東西了ε=(´ο`*)))。寫仍是不寫?這是個問題(仍是總結總結吧)。先說明一下這裏的2.0指的是Android測試支持庫的uiautomator-v18:2.1.2.jar(位置:sdk-tools-windows\extras\android\m2repository\com\android\support\test
),並不是sdk-tools-windows\platforms\android-'xx'
路徑下的 uiautomator.jar。開始進入正題....(若有不當之處還望指出批評)android
在2.0中保留了uiautomator.jar中的UiObject,可是將其查找方式 new Object() 更改成 findObject() .其餘可見《UiAutomator1.0 與 UiAutomator2.0》。接下來先上圖來看看UiObject 控件點擊操做的實現過程。(爲方便只畫了一張圖,圖畫的不是很好,可能還有些問題(/ω\)。歡迎指正批評 )
windows
先從藍色字體來看,自動化測試腳本在測試設備上實現控件點擊操做能夠分爲3步:首先要對設備控件操做就得得到一個UiDevice對象; 其次在該設備上獲取要操做的UiObject對象; 最後對該設備的控件進行操做(如:點擊,滑動,拖拽等)數組
QueryController#findAccessibilityNodeInfo
方法:首先等待設備空閒,獲取當前窗口可訪問性節點信息。以此時點擊操做的選擇器標準做爲匹配條件,遍歷稀疏數組中的屬性與可訪問性節點信息相關屬性是否匹配。若匹配,則返回該選擇器對應的AccessibilityNodeInfo對象;不然拋出UiObjectNotFoundException。而後經過該節點信息獲得控件中心座標點。InteractionController#runAndWaitForEvents
方法:首先啓動線程執行點擊操做---本質是將MotionEvent.ACTION_DOWN以及中心座標點做爲運行事件進行注入,等待100ms,再將MotionEvent.ACTION_UP進行注入。而後在指定(5500ms)的等待時間內監聽事件AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED |AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
注:若點擊操做後未出現監聽到窗口內容或狀態事件則等待最大時長。點擊操做和點擊等待新窗口的區別在於: 等待事件不同、等待時間不同測試
UiObject2是 2.0中新增的類,功能與UiObject大致一致。區別在於其選擇器、控件的查找方式、控件對象的生命週期。也上張圖來看看吧!
字體
先從藍色字體來看,UiObject與 UiObject2的區別在於 第二步和第三步。UiObject2中的使用的新的 選擇器 By 和 點擊方法 clickAndWait()網站
注:Until 只提供了2個事件條件:Until.newWindow() 和 Until.scrollFinished(Direction direction)ui