在羣裏看到WebDriverAgent這個東西,出於好奇,便開始百度+谷歌,最終對其有了簡單的瞭解。也對自動化測試也有了一個初步的瞭解。接下來你看到的是對WebDriverAgent的一些介紹。node
WebDriverAgent簡稱WDA。它是由Facebook推出的一款移動端測試框架。它是在iOS客戶端實現了一個WebDriver的Server,藉助這個server,咱們能夠遠程控制iOS設備進行測試。
它更多的是測試人員進行自動化測試用的,因此在 testerhome 上有一些文章對其進行了介紹。具體的文章連接能夠參見文末的附錄。python
據官方介紹,它是經過連接XCTest.framework和調用蘋果的API直接在設備上執行命令。在網上看到一張圖:
先忽略這張圖,咱們能夠先看一個Xcode自帶的軟件:Accessibility Inspector。直接打開Xcode,而後點擊菜單的Xcode-->Open Developer Tool便可找到該軟件。這個軟件按照名稱來理解的話簡單能夠理解爲可用性檢查員。經過選擇不一樣的設備(Mac、Simulator、iPhone),能夠對其進行檢查,例如我直接選擇個人mac,而後選擇微信那個進程,你會發現該軟件的首頁是Quicklook,也就是對微信APP的一個概覽。你能夠點擊頁面上的相似瞄準器的按鈕,當你選中以後,顏色會變成藍色,這個時候將鼠標移動到微信界面上,你會發現使用它能夠檢查微信mac版本的各個元素,而且能夠查看各個元素的屬性,若是該元素具備Actions,你還能夠進行點擊操做。也就是說你徹底不用直接去操做微信,而直接使用Accessibility Inspector進行操做便可。基於此,咱們能夠利用查看的層級結構,進行UI自動化測試。ios
更多的關於Accessibility能夠參見iOS Accessibility Tutorial。對這個的理解我如今只停留在對工具的使用,後續會繼續進行學習。git
也就是基於Accessibility、XCTest.framework和UIAutomation.framework,才實現了對APP的各類操做,而WDA就是經過在被測設備上安裝了WebDriverAgentRunner,而後經過WDA的一些API進行了服務器和客戶端交互。基於API進行編寫業務測試腳本,最後將腳本運行實現自動化測試的過程。github
在WDA的Github上也給出了WDA的特性:
1.支持真機 &&模擬器
在模擬器上運行仍是比較方便的,在真機上須要進行證書配置、進行端口轉發。這個下面會介紹到。
2.實現了大多數的WebDriver Spec
3.實現了部分Mobile JSON Wire Protocol Spec
若是想進一步瞭解Mobile JSON Wire Protocol Spec是什麼,能夠查看附錄的1連接
4.支持USB鏈接設備
USB鏈接設備的時候,須要代理轉發,這裏用到了mobiledevice(或者使用usbmuxd)方法很簡單直接進行端口代理便可(可參見本條特性的外鏈)。
5.提供了一個Inspector,能夠很直觀地查看當前設備的狀態以及元素tree。
6.方便上手,它能夠直接經過Xcode啓動和調試
7.Unsupported yet,but works with tvOS & OS Xweb
WDA的安裝很方便,只須要執行下面幾個步驟就搞定(前提是你安裝了各類環境支持,npm,node,carthage等):
第一步:下載工程,下載連接點這裏。
第二步:在解壓後的工程根目錄執行下面腳本:shell
./Scripts/bootstrap.h
該操做會經過Carthage安裝全部的依賴、使用npm構建inspector包。
第三步:打開WebDriverAgent.xcodeproj,開啓WebDriverAgentRunner test便可。npm
選中要執行的設備,按照安裝的第三步執行,便可啓動WDA,執行UITestingUITests,當console輸出以下信息則說明啓動成功:json
2018-06-27 15:56:14.352191+0800 WebDriverAgentRunner-Runner[9119:362446] +[CATransaction synchronize] called within transaction 2018-06-27 15:56:14.477644+0800 WebDriverAgentRunner-Runner[9119:362446] Running tests... objc[9119]: Class VCWeakObjectHolder is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AVConference.framework/Frameworks/ViceroyTrace.framework/ViceroyTrace (0x12bfce4d0) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AVConference.framework/AVConference (0x12b0fae38). One of the two will be used. Which one is undefined. 2018-06-27 15:56:16.007610+0800 WebDriverAgentRunner-Runner[9119:362446] Continuing to run tests in the background with task ID 1 Test Suite 'Selected tests' started at 2018-06-27 15:56:16.612 Test Suite 'WebDriverAgentRunner.xctest' started at 2018-06-27 15:56:16.613 Test Suite 'UITestingUITests' started at 2018-06-27 15:56:16.613 Test Case '-[UITestingUITests testRunner]' started. t = 0.00s Start Test at 2018-06-27 15:56:16.614 t = 0.00s Set Up 2018-06-27 15:56:16.617879+0800 WebDriverAgentRunner-Runner[9119:362446] Built at Jun 26 2018 18:43:04 2018-06-27 15:56:16.708704+0800 WebDriverAgentRunner-Runner[9119:362446] ServerURLHere->http://172.19.156.187:8100<-ServerURLHere
關鍵是最後一句話,顯示了Server 的URL,直接將其拷貝,而後在瀏覽器打開便可。
地址後面添加/status能夠查看當前設備(你使用的哪一個設備運行,就是哪一個設備的狀態)的狀態。
地址後添加/inspector便可打開inspector,查看元素,界面以下:
到這裏,你就能夠按照WDA提供的API進行腳本編寫了,API地址爲https://github.com/facebook/WebDriverAgent/wiki/Queries 。裏面有不少命令,按照命令便可編寫shell腳本進行自動化測試。例如從APP中回到主屏幕的操做(至關於點擊了home button):bootstrap
curl -X POST -H "Content-Type: application/json" -d "" http://localhost:8100/wda/homescreen
能夠先看一下API提供的語句:
curl -X GET $JSON_HEADER $DEVICE_URL/status
其中:
$JSON_HEADER表明:' -H "Content-Type: application/json" '
$DEVICE_URL表明剛纔的ServerURL。
可是這種方式寫起來比較麻煩,在網上又進行了查找,最終發現了facebook-wda非官方提供,可是很好用,安裝方式也比較簡單,直接執行命令(前提是安裝了python以及pip):
pip install --pre facebook-wda
而後就可使用python進行腳本編寫:
#coding:utf-8 import wda driver = wda.Client('http://172.13.156.187:8100') # setting_session = driver.session('com.apple.Preferences') # setting_session(text=u'通用',className='Cell').tap() #點擊home button driver.home()
這樣寫起來看着就比較方便了。簡單作一個對比:
WDA提供的API操做有不少,直接查看相關文檔便可。另外,當時風靡一時的跳一跳python腳本執行,就是基於WDA進行的。想本身嘗試的能夠查看附錄2連接。親測可用。有一點須要注意的是在wechat_jump_game項目中,你要把對應的config.json文件拷貝到這個根目錄,這樣wecaht_jump_auto_iOS.py腳本才能夠讀到這個配置。
WDA的使用還有不少方面,網易遊戲團隊ATX測試框架進行iOS測試就是使用的WDA,另外比較知名的appium也採用的WDA。有興趣能夠對其進行研究學習。
在學習的過程當中發現了testerhome這個網站,應該是QA同窗比較鍾愛的網站,裏面有各類文章以及問答,大多數都是關於測試技術相關,強烈推薦給QA同窗。
1.做爲移動測試人員,你應該知道的移動自動化測試協議 Mobile JSON Wire Protocol Specification
2.基於python+WebDriverAgent的跳一跳小程序高分教程
3.iOS測試 WebDriverAgent簡介
4.iOS自動化實踐——WebDriverAgent(一)
5.iOS自動化實踐——WebDriverAgent(二)