[本文出自天外歸雲的博客園]
原理
對於iOS自動化操作,主要靠WebDriverAgent來完成。在Mac電腦上連接真機iPhone,運行WebDriverAgentRunner會在Mac端啟動WDA服務器,並在手機iPhone端安裝一個WebDriverAgentRunner應用。我們通過編寫腳本來與WDA服務器通信,告訴WDA服務器我們想要如何操作iPhone手機,WDA服務器與安裝在手機iPhone端的WebDriverAgentRunner應用通信並通過該app發送模擬指令來實現操作iPhone手機
安裝過程
1. 安裝WebDriverAgent:https://github.com/facebook/WebDriverAgent
2. 及其依賴的庫Carthage:https://github.com/Carthage/Carthage
3. 需要npm的支持
啟動與停止WDA服務器
方式1:命令行啟動模擬器 xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'platform=iOS Simulator,name=iPhone 6' test
方式2:在真機上運行參考這篇文章進行配置:ATX 文檔 - iOS 真機如何安裝 WebDriverAgent
停止運行WDA:Xcode-Product-Stop
安裝並了解facebook-wda的用法
1. 安裝wda的python庫:pip install facebook-wda
2. 了解facebook-wda
遇到的問題與解決方法
1. 從app安裝包的plist文件中查看iOS應用的bundleId
2. 通過facebook-wda點擊home鍵報錯解決辦法: “這個是wda的問題,判斷桌面是否出現導致了超時,英文系統是Docker,中文系統是程序塢”,解決方法是更改WebDriverAgent文件夾下WebDriverAgentLib文件夾下的FBSpringboardApplication.m文件中fb_isApplicationBoardVisible函數的返回為return self.otherElements[@"Dock"].isEnabled || self.otherElements[@"程序塢"].isEnabled;
編寫腳本
可以通過編寫運行python腳本,通過調用wda封裝的方法,與WebDriverAgentRunner運行的服務器交互。實現一些自定義的行為,達到操控iPhone的目的。例如:
import wda c = wda.Client('http://WDAServer的ip:8100') print(c.status()) c.healthcheck() c.home() s = c.session('app的bundleId') s(text="跳過").click_exists(timeout=5.0) s(text="廣場").click_exists(timeout=5.0) s.close()
以上代表的基本關鍵操作如下:
1. 連接已經運行起來的WebDriverAgentRunner服務器,在xcode的終端可以看到WDAServer的ip
2. 通過app的bundleId來啟動app
3. 判斷是否有指定文字的按鈕並點擊,設置超時時間為5s