一直用的是Appium,最近在研究WebDriverAgent,對二者之間的區別和聯系有了更深的認知,
Appium可跨平臺,同時支持安卓和iOS平臺,但是WebDriverAgent目前只支持iOS平臺,在使用
Appium過程中發現Appium在定位控件總是會出現不穩定現象,相對而言WebDriverAgent穩定迅捷太多。首先對二者實現原理做簡要全面的介紹。
Appium實現原理
Appiums是由Nodejs編寫的,集成了現有優秀框架,以Selenium WebDriver的協議統一起來,遵循RESTful設計風格web 服務器,它接受客戶端的連接,接收客戶端的命令,在手機設備上執行命令,然后通過HTTP的響應收集命令執行的結果。這種架構給我們提供了很好的開放特性:只要某種語言有http 客戶端的api,我們就可以通過這個語言寫我們的測試代碼,當然了我們為了方便大家使用,提供了多種語言的客戶端庫供使用,我們在項目組選擇的就是基于Python
的client
端。
一、安卓平臺實現原理
1、架構圖
可以把請求接收并轉義轉發給中間件Bootstrap.jar,它是用java寫的,安裝在手機上。Bootstrap 接收appium 的命令(4724端口),最終通過調?用UiAutomator的命令來實現對手機的操作。(5)Bootstrap可以理解為它是一個uiautomator的測試腳本,它的入口類Bootstrap繼承于UiAutomatorTestCase,所以UiAututomator可以正常運行它,它也可以正常的使用uiautomator的方法,這個就是appium的命令可以轉換成uiautomator的命令的關鍵;其次,它是一個socket服務器,它專門監聽4724端口過來的appium的連接和命令數據,并把appium的命令轉換成uiautomator的命令來讓uiautomator進行處理;最后,它處理的是appium從pc端過來的命令,是一系列的請求。(6)最后執?行的結果以Json Wire Protocol,由Bootstrap返回給appium server,再返回給Client端,Client會匯總操作結果。
二、iOS平臺實現原理
1、架構圖
iOS實現架構
WebDriverAgent實現原理
現在我想重點介紹的是WebDriverAgent,首先強調它跟UIAutomation沒有關系,它封裝的是XCTest框架,WebDriverAgent連接XCTest.framework調用蘋果的Api直接在設備上執行命令。1、原理圖
WebDriverAgent實現架構
對比
WebDriverAgent相對于Appium有著很大優勢:
支持一臺 mac 連接多臺設備進行測試(走 xcodebuild ,不走 instruments)
任意應用的 UI 測試,是任意
支持跨應用(任意界面都能控制)
控件定位方便,直接通過ip:port/inspector
查看,無需啟動Appium GUI查看
親測比Appium執行速度快
最重要的是蘋果官方將UIAutomation標識為廢棄,XCTest是未來的趨勢,必然會發揮更大的作用