如何在 iOS 真機運行 Appium

更新下:

使用 gui 啟動的 appium 1.2.2 也會有這個問題,所以你要把 deviceconsole 復制到 /Applications/Appium.app/Contents/Resources/node_modules/appium/build/deviceconsole 下面。你自己的路徑可能和我不一樣,切記。

同意如果這個問題不解決, iOS 上的 真機 inspector 也打不開。


英文好的同學請移步官方文檔real-devices,

推薦自己邊看邊試驗。

首先 Appium 支持 iOS 真機

以下條件必須滿足:

蘋果開發者賬號和開發者證書

蘋果設備,確保這個設備已經被配置為開發機器。怎么配置?

簽名過的 .ipa 文件或者源代碼

A Mac with Xcode and the Xcode Command Line Developer Tools,有 xcode和xcode command line 的 蘋果系統。別來問我,windows 怎么測試 iOS 應用。

Provisioning Profile

再次強調真機需要有效的開發分發證書和開發的 Provisioning Profile。

你的應用需要簽名。Appium 會參試使用 Fruitstrap 安裝應用。

但是使用 xcode 安裝到真機會方便很多。

拓展:什么是 Provisioning Profile?

運行

要指定真機運行有兩種方式:

appium 啟動的時候,指定 udid 和 app bundleappium -U --app

或者在腳本里指定兩個 desired capability

desired_capabilities={'app':'com.xxx.iphone','udid':'70643e56c1b0f3c3132c44c87e433a48b5531ee6','platformName':'iOS','deviceName':'iPhone'})

注意: 如果設備中未安裝 app 可以指定 ipa 地址,如果安裝了,

則指定 bundle ID。

所以對于第一種情況,代碼可以這樣寫:

self.driver=webdriver.Remote(command_executor='http://127.0.0.1:4723/wd/hub',desired_capabilities={'deviceName':'','platformName':'iOS',})

對于第二種情況,代碼可以這樣寫:

app="io.appium.TestApp"self.driver=webdriver.Remote(command_executor='http://127.0.0.1:4723/wd/hub',desired_capabilities={'deviceName':'','platformName':'iOS','app':app,'udid':'cc6bcd6a94aeb8490924dd05c5b318bfbfafb3bb'})

調試的思路

確保 UDID 的正確,是真機的 UDID。(20+ 字符串)

確保在模擬器上已經能運行無誤了。

直接使用 Instruments 看看是否能在真機上運行。有些情況連 xcode 的 instruments 都不能在真機上調試,那更別談 appium 了

確保運行 appium 用例前, instruments 沒有啟動過。看看有沒有 instruments 的進程。

目前 1.2.2 的坑

目前 appium 1.2.2 上運行 iOS 真機測試的話,可能會遇到如下的錯誤:

info:[debug] Starting iOS device log capture via deviceconsoleerror: iOS log capture failed: spawn ENOENTinfo:[debug] Cleaning up appium sessionerror: Failed to start an Appium session, err was: Error: spawn ENOENTinfo:[debug] Error: spawn ENOENT? ? at errnoException(child_process.js:1000:11)at Process.ChildProcess._handle.onexit(child_process.js:791:34)info:[debug] Responding to client with error:{"status":33,"value":{"message":"A new session could not be created. (Original? error: spawn ENOENT)","code":"ENOENT","errno":"ENOENT","syscall":"spawn","origValue":"spawn ENOENT"},"sessionId":null}info: <-- POST /wd/hub/session 500 1780.745 ms - 197

這是因為在 /usr/local/lib/node_modules/appium/build/deviceconsole/ 下面缺失了 deviceconsole。已經有bug追蹤了。

解決方法如下:

到該目錄底下cd /usr/local/lib/node_modules/appium/build/deviceconsole/

打開這個deviceconsole project。open deviceconsole.xcodeproj

重新 build 一把。把 build 出來的 deviceconsole,復制到/usr/local/lib/node_modules/appium/build/deviceconsole/去。

然后重新運行 Appium

注意: deviceName 就算為空也一定要,代碼寫死的。。。

恒溫寫于http://testerhome.com/topics/1377

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容