appium環(huán)境配置

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,

image.png
進(jìn)入到此頁面表示安裝完成,下一步配置Android_home環(huán)境變量

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
image.png

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


image.png
image.png

終端進(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
  1. 需啟動(dòng)appium server node /Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --no-reset -U udid
  2. 啟動(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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • 注:appium安裝到C盤,node.js安裝到C盤一、安裝node.js1、到官網(wǎng)下載node.js:https...
    茶小汐閱讀 595評(píng)論 1 11
  • 第一章 Appium環(huán)境配置(windows)一.Java環(huán)境配置二.Android環(huán)境配置三.Appium服務(wù)配...
    Shirley崔閱讀 355評(píng)論 0 1
  • 林敬言 原呼嘯隊(duì)長(zhǎng) 原霸圖隊(duì)員 現(xiàn)退役 原角色唐三打 現(xiàn)角色冷暗雷 林敬言 是幾個(gè)大神級(jí)選手里 少有的 沒有得到過...
    凡天星宇閱讀 1,003評(píng)論 0 2
  • 是不是一堆人在排著隊(duì)罵了,我熬夜是為了工作,工作一天加班到半夜,你還說我昨晚熬的夜沒有意義? 許多人把熬夜當(dāng)成一種...
    就看看wechat閱讀 413評(píng)論 0 0

友情鏈接更多精彩內(nèi)容