windows配置
略
Mac配置
安裝Java
官網(wǎng)下載 Java,下載對(duì)應(yīng)版本安裝,完成后配置環(huán)境變量vi ~/.bash_profile,如果安裝了zsh操作vi ~/.zshrc
JAVA_HOME=`/usr/libexec/java_home`
export JAVA_HOME
保存后 source ~/.bash_profile
終端輸入java -version出現(xiàn)安裝版本號(hào)等信息,表示配置正確
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
安裝appium
下載appium,建議安裝appium-desktop版本,以支持iOS 9.0+系統(tǒng)測(cè)試;官方下載地址,dmg安裝包直接安裝。
配置Android開發(fā)環(huán)境
簡(jiǎn)潔的辦法通過安裝Android studio安裝,官網(wǎng)下載安裝Android Studio,安裝完成后打開Android studio,按照引導(dǎo)下載安裝Android sdk,

export ANDROID_HOME=/Users/修改為自己的用戶名/Library/Android/sdk
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
配置完成后 source ~/.bash_profile
終端adb命令可用表示,Android環(huán)境配置完成
Xcode安裝
App Store安裝Xcode 9.1以上版本
配置iOS真機(jī)測(cè)試環(huán)境
為了可以支持測(cè)試機(jī)9.0以上系統(tǒng),環(huán)境要求Xcode8+ MAC系統(tǒng)10.11+
安裝Xcode
安裝Xcode 8+版本,App Store直接可以下載安裝9.1,其他版本到https://developer.apple.com/xcode/查找下載。
如果有其他需要可以安裝多個(gè)版本Xcode,具體方法:
下載不同版本xcode,重命名不同的名字安裝,
切換不同版本的xcode,
sudo xcode-select -switch /Applications/Xcode***.app
gcc --version可以查看當(dāng)前Xcode版本安裝相關(guān)的依賴
沒有安裝brew 官網(wǎng)方式/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"安裝brew
brew install carthage
brew install libimobiledevice --HEAD
brew install ideviceinstaller
穿插一下ideviceinstaller的用法
ideviceinstaller -l 列出安裝應(yīng)用列表
ideviceinstaller -i ~/****/Im.ipa 安裝應(yīng)用
ideviceinstaller -U com.Im.Im 卸載應(yīng)用
idevicescreenshot 截圖到當(dāng)前目錄
如果有報(bào)錯(cuò)Could not connect to lockdownd, error code -21的問題
可以通過sudo chmod -R 777 /var/db/lockdown解決,
or 前者操作問題未解決可以如下操作
brew uninstall ideviceinstaller
brew uninstall libimobiledevice
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstaller
- 配置WebDriverAgent
在appium目錄/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/下找到WebDriverAgent,因?yàn)閃ebDriverAgent需提前編譯運(yùn)行通過才能使用,先將此文件夾移除,git clone https://github.com/facebook/WebDriverAgent.git到此目錄,雙擊WebDriverAgent.xcodeproj通過Xcode編譯運(yùn)行wda
打開項(xiàng)目后設(shè)置以下內(nèi)容:
通過Preference->Accounts添加apple ID個(gè)人賬號(hào)即可,下載證書;
image.png

設(shè)置Bundle Identifier 設(shè)置一個(gè)復(fù)雜的名稱避免被別人使用過


終端進(jìn)入項(xiàng)目(WebDriverAgent)目錄,分別執(zhí)行
mkdir -p Resources/WebDriverAgent.bundle
./Scripts/bootstrap.sh -d
./Scripts/bootstrap.sh
沒有報(bào)錯(cuò)繼續(xù)往下走,如有問題,需按具體問題查對(duì)應(yīng)的解決辦法。
常遇到的一個(gè)報(bào)錯(cuò)如下:
ERROR in ./js/app.js
Module parse failed: /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/js/app.js Unexpected token (67:6)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (67:6)
at Parser.pp$4.raise (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:2221:15)
at Parser.pp.unexpected (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:603:10)
at Parser.pp$3.parseExprAtom (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1822:12)
at Parser.pp$3.parseExprSubscripts (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1715:21)
at Parser.pp$3.parseMaybeUnary (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1692:19)
at Parser.pp$3.parseExprOps (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1637:21)
at Parser.pp$3.parseMaybeConditional (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1620:21)
at Parser.pp$3.parseMaybeAssign (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1597:21)
at Parser.pp$3.parseParenAndDistinguishExpression (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1861:32)
at Parser.pp$3.parseExprAtom (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1796:19)
at Parser.pp$3.parseExprSubscripts (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1715:21)
at Parser.pp$3.parseMaybeUnary (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1692:19)
at Parser.pp$3.parseExprOps (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1637:21)
at Parser.pp$3.parseMaybeConditional (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1620:21)
at Parser.pp$3.parseMaybeAssign (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1597:21)
at Parser.pp$3.parseExpression (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1573:21)
at Parser.pp$1.parseReturnStatement (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:839:33)
at Parser.pp$1.parseStatement (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:699:34)
at Parser.pp$1.parseBlock (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:981:25)
at Parser.pp$3.parseFunctionBody (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:2105:24)
at Parser.pp$3.parseMethod (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:2075:10)
at Parser.pp$1.parseClassMethod (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1137:25)
at Parser.pp$1.parseClass (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:1118:14)
at Parser.pp$1.parseStatement (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:697:19)
at Parser.pp$1.parseTopLevel (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:638:25)
at Parser.parse (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:516:17)
at Object.parse (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/node_modules/acorn/dist/acorn.js:3098:39)
at Parser.parse (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/lib/Parser.js:902:15)
at NormalModule.<anonymous> (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack/lib/NormalModule.js:104:16)
at NormalModule.onModuleBuild (/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/node_modules/webpack-core/lib/NormalModuleMixin.js:310:10)
@ multi main
Done
解決辦法:
修改vi /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/Inspector/webpack.config.js文件
module: {
loaders: [
// { test: /\.js?$/, loaders: ['babel-loader'], exclude: /node_modules/ }, //修改此行 刪除', exclude: /node_modules/'
{ test: /\.js?$/, loaders: ['babel-loader'] },
{ test: /\.css?$/, loader: 'style-loader!css-loader' },
]
},
解決問題直到./Scripts/bootstrap.sh 沒有報(bào)錯(cuò)信息
USB連接iOS真機(jī),獲取設(shè)備udid,idevice_id -l可以獲取到或者通過iTunes拿到;
編譯WebDriverAgent,進(jìn)入到項(xiàng)目目錄
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=替換獲取到的udid' test
第一次運(yùn)行會(huì)報(bào)錯(cuò),需要打開手機(jī)設(shè)置-通用-設(shè)備管理(描述文件)驗(yàn)證apple id,驗(yàn)證通過后再次執(zhí)行
Test Suite 'All tests' started at 2018-07-15 17:49:16.142
Test Suite 'WebDriverAgentRunner.xctest' started at 2018-07-15 17:49:16.143
Test Suite 'UITestingUITests' started at 2018-07-15 17:49:16.143
Test Case '-[UITestingUITests testRunner]' started.
t = 0.00s Start Test at 2018-07-15 17:49:16.145
t = 0.00s Set Up
2018-07-15 17:49:16.160133+0800 WebDriverAgentRunner-Runner[3707:502461] Built at Jul 15 2018 17:41:42
2018-07-15 17:49:16.201221+0800 WebDriverAgentRunner-Runner[3707:502461] ServerURLHere->http://10.154.23.100:8100<-ServerURLHere
表示W(wǎng)ebDriverAgent編譯啟動(dòng)通過。
WebDriverAgent也可以通過Xcode編譯運(yùn)行(過程略)
appium 開發(fā)環(huán)境可以到github下載源碼,可以參考https://testerhome.com/topics/2037這篇帖子。
安裝appium client
appium是一個(gè)web接口,他接受http請(qǐng)求,各個(gè)語言都可以自己封裝發(fā)送請(qǐng)求與appium server進(jìn)行交互進(jìn)而操作測(cè)試機(jī)進(jìn)行測(cè)試
官方對(duì)應(yīng)各個(gè)語言的client 選擇自己所用語言的client進(jìn)入到GitHub頁面,點(diǎn)擊選擇release標(biāo)簽下載安裝包安裝。
啟動(dòng)appium server 進(jìn)行測(cè)試
- Android
可以通過appium ui的界面啟動(dòng)server 也可以通過命令去啟動(dòng),
node /Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --no-reset -U device_id
具體對(duì)應(yīng)的參數(shù)意義可以查看官方的說明
默認(rèn)監(jiān)聽端口4723 appium通信端口4724(android)
啟動(dòng)server后,測(cè)試啟動(dòng)Android app參數(shù)示例:
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True # 設(shè)置用appium的輸入法
desired_caps['newCommandTimeout'] = 240
desired_caps['platformName'] = 'android' # 測(cè)試平臺(tái)
desired_caps['appPackage'] = 'Im.chen'
desired_caps['appActivity'] = 'com.Im.StartFlashActivity'
desired_caps['version'] = '7.0' # 系統(tǒng)版本
desired_caps['deviceName'] = 'deviceid' # 測(cè)試機(jī)設(shè)備號(hào)
desired_caps['app'] = '/path/pro.Im.apk' # 被測(cè)的apk的位置
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
- iOS
- 需啟動(dòng)appium server
node /Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --no-reset -U udid - 啟動(dòng)WebDriverAgent
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=udid' test啟好后,需要轉(zhuǎn)發(fā)8100端口iproxy 8100 8100,完成后瀏覽器訪問http://localhost:8100/status得到j(luò)son數(shù)據(jù)表示ok
image.png
準(zhǔn)備工作完成后,測(cè)試iOS應(yīng)用參數(shù)示例:
desired_caps={}
desired_caps['automationName'] = 'XCUITest'
desired_caps['userable'] = 'yes'
desired_caps['enabel'] = 'yes'
desired_caps['newCommandTimeout'] = 20000
desired_caps['platformName'] = 'ios'
desired_caps['platformVersion'] = '10.3.3'
desired_caps['deviceName'] = 'iPhone 6s'
desired_caps['bundleId'] = 'com.Im.Im'
desired_caps['udid'] = 'udid'
desired_caps['xcodeOrgId'] = '******'
# 這個(gè)參數(shù)可以在Xcode上獲取,也可以在啟動(dòng)WebDriverAgent后找到應(yīng)用的內(nèi)容
desired_caps['webDriverAgentUrl'] = "http://localhost:8100"
desired_caps['app'] = "/path/"
self.driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)

