UIAutomator是一個Android自動化測試框架,是谷歌在Android4.1版本發佈時推出的一款用Java編寫的UI測試框架,它只能用於UI即黑盒方面的測試。因此UIAutomator只能運行在Android4.1以後的版本,其最大的特色是能夠跨進程操做。咱們可使用UIAutomator框架提供的一些方便的API來對Android應用進行一系列的自動化測試操做,如點擊、滑動、鍵盤輸入、長按以及經常使用的斷言方法。能夠代替繁複的手工測試。瀏覽器
優勢:框架
缺點:socket
首先,Google的UIAutomator參考微軟的UIAutomation提供的一套用在Android上的自動化測試框架。 基於Android AccessilibilityService。 在這裏簡單介紹一下:AccessilibilityService是一個可訪問服務,它是一個爲加強用戶界面並幫助殘疾用戶的應用程序,或者用戶可能沒法徹底與設備交互。舉個簡單的例子,假如一個用戶在開車。那麼用戶就有可能須要添加額外的或者替代的用戶反饋方式。其應用方式通常有兩種:函數
第一種方法是:UIAutomatorView + monkey。它與hierachyview + monkey差很少。其區別是:UIAutomatorView經過ADB向設備側發送一個dump命令,而不是創建一個socket,下載一個包含當前界面控件佈局信息的xml文件。相比較hierachyview下載的內容而言,該文件小不少。所以,從效率上講,這種方法比第一種應用模式快不少。工具
第二種方法是: 直接調用UIAutomator框架對外提供的API,主要有UIDevice、UISelector、UIObject和 UIScrollable等。其原理與第一種方式即HierachyView + Monkey差很少。其過程大體是:首先,UIAutomator測試框架經過Accessibilityservice,獲取當前窗口的控件層次關係及屬性信息,並查找到目標控件。如果點擊事件,則計算出該控件的中心點座標。其次,UIAutomator經過 InputManager.getInstance().injectInputEvent隱藏接口來注入用戶事件(點擊、輸入類操做),從而實現跨進程 自動化的目的。佈局
UIAutomator對外還提供了UIAutomatorTestCase、UIDevice、UISelector、UIObject、UICollection、UIScrollable等重要的類,其各自的做用以下:單元測試
定義一個點擊對象Object,該對象則經過UISelector對象定位到具體的控件。而UISelector則經過 UIAutomatorBridge(它可看作是UISelector與AccesibilityService之間的鏈接器),將查詢內容 (AccessibilityNodeInfo)和輸入事件(AccessibilityEvent)傳給AccessibilityService。實 際業務過程比這複雜的多。這樣,就實現了對某個控件的查找或點擊操做。備註:AccessibilityEvent,全部可操縱的UI元素都定義爲一個 AccessibilityEeventt;AccessibilityNodeInfo指視窗中的組件樹節點。測試