自己研究好久ios10的真機測試今天算是成功了。新手發帖,僅供參考。原文地址https://github.com/appium/appium-xcuitest-driver
- 1,有一個MAC機器,或者虛擬機,能夠聯網,要求Xcode8+ MAC系統10.11+(我用的是Xcode8.2 , MAC系統10.12)有一個Apple ID賬號
- 2,安裝brew
usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 3,安裝libimobiledevice
brew install libimobiledevice --HEAD
- 4,安裝carthage
brew install carthage
- 5,安裝node(目的是安裝npm)按照官方的地址https://nodejs.org/en/download/。 下載.pkg文件安裝
- 6,安裝cnpm(由於某種原因,直接用npm下載安裝會有好多網絡問題,安裝淘寶的cnpm要比npm好用) https://npm.taobao.org/
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 7,安裝ios-deploy
cnpm install -g ios-deploy
- 8,安裝xcpretty
gem install xcpretty
- 10,安裝appium1.6.3(到發帖爲止,最新版本是1.6.3,要其他版本的跟上版本號就行了)這一步驟若出現安裝jDK彈出框忽略就好
cnpm install -g appium@1.6.3
1-10 以上安裝不要在root用戶下安裝。若出現權限問題,進入root用戶將文件權限更改下。然後退出root用戶繼續安裝即可
chmod -R 777 pathForFile
關於如何進入root用戶,我就不多說了,自己百度。
以上都很簡單,下面重點來了。
- 11,安裝appium-xcuitest-driver依賴 進入WebDriverAgent安裝目錄。運行bootstrap
cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent (如果WebDriverAgent 所在路徑和此不同,請自行查找)
mkdir -p Resources/WebDriverAgent.bundle
sh ./Scripts/bootstrap.sh -d
在運行sh ./Scripts/bootstrap.sh -d很可能會有因爲某種原因而網絡連接失敗。方法就是去App store下載了一個VPN代理軟件,我下了一個評分最多且免費的,的確很好用。我就不說軟件名稱了。
再次運行sh ./Scripts/bootstrap.sh -d 無報錯就OK了
- 12,用Xcode打開WebDriverAgent,並且編譯
進入WebDriverAgent 文件夾,可用如下方法
雙擊WebDriverAgent.xcodeproj打開此項目,這個項目由facebook開源 有興趣的話可以研究https://github.com/facebook/WebDriverAgent/apple。在這裏我們的目的就是更改一些配置,讓他能夠編譯成功,首先編譯之前你得有 ID賬號,並且登錄你的Xcode賬戶。當然如果有開發者賬號那麼會更好,不過我買不起,但是基於Xcode7之後,蘋果放開了真機調試,所以沒有開發者賬號。也能在真機上跑起來,直接上截圖。
編譯WebDriverAgentLib
編譯WebDriverAgentRunner
關於爲什麼要設置Deployment Target,蘋果官方宣稱XCUItest支持9.3.4以上。但實際經過我測試9.0以上是沒問題的,但是如果不調低最小安裝的ios版本,會面臨着WebDriverAgentRunner無法安裝到ios9.0的手機上去的,所以無法測試ios9。
若果編譯的過程中有語法錯誤,應該是11步沒有安裝好 - 13,建立服務WebDriverAgent (手機和MAC都在同一個網段下,且都能連接外網)
關閉Xcode,進入WebDriverAgent 文件夾
cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=真機的udid' test
而iphone多了一個WebDriverAgentRunner的app。手動啓動那個app的時候
原因是我們手機並並沒有信任這個apple id的開發者,到設置-通用-設備管理(描述文件) 信任你的apple id就可以了。再次運行上述命令,看到如下圖,就成功了,
- 14,運行appium
appium -p 4723
DesiredCapabilities cap = new DesiredCapabilities();
cap.SetCapability(MobileCapabilityType.AutomationName, "XCUITest");
cap.SetCapability(MobileCapabilityType.PlatformVersion, "10");
cap.SetCapability(MobileCapabilityType.DeviceName, "iPhone 6s Plus");
cap.SetCapability(MobileCapabilityType.PlatformName, "iOS");
// cap.SetCapability("webDriverAgentUrl", "http://localhost:8100");
cap.SetCapability(MobileCapabilityType.Udid, "c8ff753c91ee2eda9be215e4109513c75b5b30c9");
cap.SetCapability(MobileCapabilityType.NewCommandTimeout, 3600);
cap.SetCapability("bundleId", "com.test.app");
IOSDriver<IOSElement> driver = new IOSDriver<IOSElement>(new Uri("http://192.168.0.20:4724/wd/hub"), cap, TimeSpan.FromSeconds(120));
就可以成功啓動了。手機上的apple id的描述文件,需要時時連接到蘋果官網去驗證,所以一旦手機關閉外網,WebDriverAgentRunner就會啓動不了,所以用apple ID這就是比較悲催事情的,如果用開發者賬號應該不會有這種情況。
第一次啓動會比較慢,大約1分鐘。因爲第一次啓動appium需要建立13步的服務,第二次啓動默認會把WebDriverAgentRunner關掉再啓動(這個就比較蛋疼了)每次啓動都是1分鐘。研究了好久。終於解決了。 把webDriverAgentUrl參數放開。appium就會直接用這個url和WebDriverAgentRunner通信,不會再去建立新的服務,啓動一個app就很迅速了。實際跑下來,並沒有網上說的那麼慢。但是確實也不算快。
上張成功啓動後的appium日誌截圖。