備註: wendriveragent作爲appium和ios設備的中間通信的橋樑,安裝實現有很多細節問題,會踩一些坑
安裝環境目錄(親測可以運行成功):
1.xcode安裝(建議mac系統在10.12以上,xcode在8.1以上,避免低版本影響)
2.開發者證書(可以使用免費)
3.homebrew安裝(用brew來安裝依賴)
4.git安裝
5.npm和nodejs、cnpm安裝(appium需要node環境,用cnpm或者npm來安裝依賴)
6.libimobiledevice的安裝(這是類似安卓的adb的工具,連接設備)
7.ios-deploy安裝(ios10以上需要安裝來連接設備)
8.idevicesinstaller安裝(iOS9一下的的類似安卓adb的工具,安裝、卸載)
9.Carthage安裝 (類似maven一樣管理依賴,WebdriverAgent編譯需要安裝依賴)
10.appium-命令行或者桌面版安裝
11.appium-doctor安裝(用於檢查appium的相關環境是否配置成功)
12.java+sdk安裝,並配置環境變量
13.webdriveragent安裝(安裝一個webdriveragentrunner來通信驅動iOS設備)
14.啓動appium
15.安裝ios-webkit-debug-proxy (iOS的H5測試)
1.xcode安裝(建議mac系統在10.12以上,xcode在8.1以上,避免版本影響)
2.開發者證書(可以使用免費)--具體申請,百度搜索
http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/2_device_connection/4_ios_connection.html
3.homebrew安裝(用brew來安裝依賴)
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update可以使用這更新
4.git安裝
brew install git
5.npm和nodejs、cnpm安裝(appium需要node環境,用cnpm或者npm來安裝依賴)
brew install node
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org 安裝cnpm
檢查是否安裝成功
node -v
npm -v
cnpm -v
6.libimobiledevice的安裝(這是類似安卓的adb的工具,連接設備)
brew install --HEAD libimobiledevice (安裝build失敗 Xcode版本太老了,最好升級到xcode10.1)
1、打印app列表 ideviceinstaller -l
2、查看當前已連接的設備的UUID idevice_id -l
3、獲取設備信息 ideviceinfo
4、獲取設備時間 idevicedate
5、重啓設備 idevicediagnostics restart
6、安裝ipa包,卸載應用 ideviceinstaller -i xxx.ipa
//命令安裝一個ipa文件到手機上,如果是企業簽名的,非越獄機器也可以直接安裝了。
ideviceinstaller -U [bundleID]
//命令卸載應用,需要知道此應用的bundleID
8、截圖 idevicescreenshot
7.ios-deploy安裝(ios10以上需要安裝來連接設備)
cnpm install -g ios-deploy
2. ios-deploy常用命令
2.1 查看連接的設備(包括通過usb和wifi連接的)
ios-deploy -c
2.2 查看通過usb連接的設備
ios-deploy -c --no-wifi
2.3 安裝應用到指定設備(其中xxx.app是Xcode編譯後的ipa的路徑)
ios-deploy --id [udid] --bundle [xxx.app]
2.4 卸載指定設備上的應用(根據包名,也就是bundleId)
ios-deploy --id [udid] --uninstall_only --bundle_id [bundleId]
2.5 查看指定設備上安裝的所有應用(包括系統應用和第三方)
ios-deploy --id [udid] --list_bundle_id
如 ios-deploy --id 0420781d4e43f1f99935513c91e9b816f4dddc24 --list_bundle_id
2.6 檢查指定設備上是否安裝了某個應用
ios-deploy --id [udid] --exists --bundle_id
如 ios-deploy --id 0420781d4e43f1f99935513c91e9b816f4dddc24 --exists --bundle_id com.facebook.wda.integrationApp.taozhen
8.idevicesinstaller安裝(iOS9一下的的類似安卓adb的工具,安裝、卸載)
brew install ideviceinstaller
9.Carthage安裝 (類似maven一樣管理依賴)
brew install carthage
檢查命令
carthage version
10.appium-命令行或者桌面版安裝
http://appium.io/ 官網下載
開啓打開這個鏈接 http://127.0.0.1:4723
11.appium-doctor安裝(用於檢查appium的相關環境是否配置成功)
sudo npm install appium-doctor -g 或者
sudo cnpm install -g appium-doctor
安裝的地址存放:
link /usr/local/bin/appium-doctor@ -> /usr/local/lib/node_modules/appium-doctor/appium-doctor.js
檢查 命令
appium-doctor
appium-doctor --ios
appium-doctor --android
12.java+sdk安裝,並配置環境變量
百度下載安裝jdk和sdk
13.webdriveragent安裝(安裝一個webdriveragentrunner來通信驅動iOS設備)
第一步:git clone https://github.com/facebook/WebDriverAgent.git
第二步:brew install Carthage
mkdir -p Resources/WebDriverAgent.bundle # 不知道爲啥要加這步,先加着
第三步:./Scripts/bootstrap.sh
webdriveragent編譯構建
WebDriverAgentLib、WebDriverAgentRunner、products下的integrationApp這三個都要設置開發者證書,並且bundleid修改
編譯成功後,會在手機上有一個webdriveragent的一個app信任就可以使用了
安裝編譯好後,需要把appium 下的webdriveragent項目替換
路徑 /Applications/Appium.app/Contents/Resources/app/node_modules/appium-xcuitest-driver
注意:
下載的appium桌面版本自帶的webdriveragent路徑在這個路徑下
/Applications/Appium.app/Contents/Resources/app/node_modules/appium-webdriveragent
也可以直接用appium自帶的webdriveragent(不用./Scripts/bootstrap.sh,直接WebDriverAgentLib、WebDriverAgentRunner、products下的integrationApp這三個都要設置開發者證書,並且bundleid修改)
參考:
https://www.jianshu.com/p/81899f2b64b0
https://www.jianshu.com/p/bf1ca3d4ac76
https://www.jianshu.com/p/568e1f4b152a
編譯WebdriverAgentRunner ----> 這時候控制檯就會打印出手機的ip和端口
⇒ ios10以下版本可以直接用瀏覽器訪問 ip+status/查看狀態:
例如:http://10.0.0.1:8100/status
⇒ ios10以上版本需要通過mac轉發一下再去訪問
proxy 8300 8100 #開啓iproxy 進行端口轉發
瀏覽器中輸入:http://localhost:8300 ,出現遺傳json字符串即可。
iproxy 8100 8100
http://localhost:8100/inspector
測試的時候,手機不鏈接wifi的話,直接就可以打開ip:端口 ,不用轉發
證書衝突的話,將BuildSettings裏的code singing identity設置成iPhone Develpoer,解決
14.啓動appium
desired_capabilities={
# 'app': app,
'platformName': 'iOS',
'platformVersion': '11.4.1',
'deviceName': '陶振的iphone', # 陶振的iphone
'bundleId': 'com.facebook.wda.integrationApp.taozhen', # com.renren-inc.nuomi com.facebook.wda.integrationApp.taozhen
'udid': '0420781d4e43f1f99935513c91e9b816f4dddc24',
'automationName': 'XCUITest',
"xcodeOrgId": "10位開發者賬號teamid", # 10位開發者賬號teamid #
"xcodeSigningId": "iPhone Developer"
}
xcodeOrgId(teamId)獲取 security find-identity -v -p codesigning
xcodeOrgId(teamId) 在安裝webdriveragent的時候可以看到
https://www.jianshu.com/p/b5bc45362fa0
15.安裝ios-webkit-debug-proxy (iOS的H5測試)
在做iOS的h5頁面的時候,肯定會需要去做webview調試來進行代碼調試,而iOS webview調試需要區分真機和模擬器,因爲具體的實現原理不一樣的,模擬器使用 remote debugger,可以直接通過safari遠程調試,而真機使用 ios-webkit-debugger-proxy去遠程調試的。
注意,測試包必須要使用develop證書打包,纔可以進行真機調試。
通過如下命令進行安裝
brew install ios-webkit-debug-proxy
安裝之後運行如下命令查看是否能夠調起ios-webkit-debug-proxy
ios_webkit_debug_proxy -c XXXXXXXXXX:27753 -d XXXXXXXXXX表示設備UDID
運行上述命令發現報錯如下:
Could not connect to lockdownd. Exiting.: Permission denied
通過查找資料,發現網上大部分的解決方案是執行如下命令:
sudo chmod -R 777 /var/db/lockdown/
appium如何啓動ios-webkit-debug-proxy
發現ios-webkit-debug-proxy可以通過設置DesiredCapabilities來調起,代碼如下:
cap.setCapability(“startIWDP”,true);
遇到問題:
1. appium-doctor 檢查異常
appium-doctor
/usr/local/lib/node_modules/appium-doctor/build/lib/general.js:59
} catch {
SyntaxError: Unexpected token {
檢查對應general代碼,看代碼意思是node版本不能低於10
升級node
brew upgrade node
如果更新brew卡住,更換brew源
替換brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
給 /usr/local賦予修改權限
sudo chown -R $(whoami) /usr/local
brew link --overwrite node 重寫link
brew link node 鏈接link
node地址
/usr/local/Cellar/node/13.7.0
編譯項目
cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=3825bba08e5c10c499ddaf0276bac01983ab7119' test
http://localhost:8100/inspector
問題1:
webdriveragent運行test,出的log裏的鏈接不成功 訪問不到的話,嘗試用 iproxy 8100 8100 (轉發之後http://127.0.0.1:8100/status 這個鏈接可以打開) 但是運行appium會提示8100端口號被佔用
webdriveragent使用iproxy 8100 8100代理後,啓動appium,提示端口8100被佔用
An unknown server-side error occurred while processing the command. Original error: The port #8100 is occupied by an other process. You can either quit that process or select another free port.
⇒ ios10以下版本可以直接用瀏覽器訪問 ip+status/查看狀態:
例如:http://10.0.0.1:8100/status
⇒ ios10以上版本需要通過mac轉發一下再去訪問
http://127.0.0.1:8100/status如果打開沒有json,啓動appium就會有這個失敗,但是使用了ipoxy 8100 8100後,使用appium又會提示8100端口號被佔用???天吶
答:不要用wifi,直接用4G ,就不用轉發
問題2
Unable to launch WebDriverAgent because of xcodebuild failure: xcodebuild failed with code 65 xcodebuild error message
出現這個問題的時候,一般是webdriveragentRunner test失敗後了,強行起appium服務就會有這個錯誤,同問題3
這個是鏈接json都沒還通 ,肯定起不來
問題3:
WebDriverAgentRunner.xctest/WebDriverAgentRunner (0x102390530). One of the two will be used. Which one is undefined.
這個問題,就重新鏈接xcode、手機插拔,重新編譯webdriveragent一遍就好了,沒有特別操作,不知道爲啥發生
斷掉wifi,不然算鏈接了兩個手機 ios-deploy -c
問題4:
webdriveragentrunner 構建成功,但是test 失敗
https://testerhome.com/topics/16950
問題5:
對於一個未知問題的說明:
在使用Appium的過程中我們會遇到一些未知問題,通過網絡查找可能會需要補充以下兩對Desired Capabiities:
{ "xcodeOrgId": "<Team ID>", "xcodeSigningId": "iPhone Developer" }
caps["app"] = "http://appium.s3.amazonaws.com/TestApp7.1.app.zip"
開發者賬號的teamid如何查看
security find-identity -v -p codesigning
問題6:
Original error: 'bundleId' desired capability not provided
答:原因是appium自帶的webdriveragent沒有正確替換,網上教程說的appium自帶的路徑在
/Applications/Appium.app/Contents/Resources/app/node_modules/appium-xcuitest-driver
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/
其實我下載的appium桌面版本V1.15.1版本自帶的webdriveragent路徑在這個路徑下
/Applications/Appium.app/Contents/Resources/app/node_modules/appium-webdriveragent
直接替換或者直接用appium自帶的webdriveragent就可以了
https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md