Appium學習之路—環(huán)境搭建
說實話,Appium第一次接觸還是在testerhome看到的,介紹說這個框架可以測試安卓和IOS,并且只要寫一個腳本,不需要做任何改動就可以直接在IOS和Android上運行笔链,這真心是一個好消息,說干就干肌割。先吧環(huán)境弄起來看看到底牛掰不牛掰。
PS:筆者使用的是Mac OS X系統(tǒng)呜叫。
準備工作
Appium提供了兩種方式,一個是客戶端殿衰,另一個是命令行朱庆。不過不論哪種方式,以下的東西都必須準備好
- Xcode Command Line Tools 這個是必須的工具可以百度以下闷祥,我是使用Mac系統(tǒng)娱颊,干脆直接下了一個完整的Xcode
- Android SDK 和AVD 這個是測試Android必須的,當然AVD可以使用Android的真機來代替凯砍。
Appium客戶端
我看到這個框架竟然還是有客戶端的箱硕,真是有一種莫名的興奮,有客戶端就意味著我可以不用搭建那些操蛋的命令行了悟衩?下載一個GUI端我就可以輕輕松松的開搞了剧罩。不過下載客戶端是需要翻墻的,這個有點蛋疼座泳,我自己的專門翻墻出去下載了一個Appium for Mac的客戶端惠昔,不過那速度慢得讓人無法直視。官網(wǎng)地址:Appium官網(wǎng)挑势。我是不太建議在官網(wǎng)下載镇防。這里推薦一個資源,下載速度比較快潮饱。Appium國內(nèi)下載地址来氧。
客戶端的使用
我個人折騰完客戶端之后,感覺不是很給力香拉,客戶端雖然界面挺漂亮的饲漾,風格也挺好,不過總體折騰下來不是我喜歡的類型缕溉,如果喜歡客戶端的朋友可以自己去折騰折騰客戶端考传,配置起來很簡單,就不做過多的贅述了证鸥。
命令行
命令行是體現(xiàn)逼格高大上的東東僚楞,不過折騰起來也很費事,筆者折騰這個命令行折騰了大概一周的時間枉层,其中種種原因很多
- java環(huán)境
Mac自帶了這東西泉褐,不過說實話一般的電腦也都會把這個環(huán)境折騰好吧,畢竟java是最流行的開發(fā)語言
- Python環(huán)境
Mac自帶了這東西鸟蜡,因為筆者是使用Python來寫腳本膜赃,當然你也可以使用其他語言來寫,比如java揉忘、ruby跳座、c#等等
- brew
brew是一個套件管理器端铛,不過筆者比較懶,直接使用Mac自帶的easy_install來安裝疲眷,比較省事
- node
node也是必須的禾蚕,如果有了brew或者easy_install,安裝是很省事的 sudo easy_install node狂丝,輸入密碼就搞定了
SvenWengdeMBP:~ svenweng$ node -v
v0.10.34
這樣就算安裝成功
- npm
npm這東西和node一樣换淆,也是使用安裝工具來安裝很方便
SvenWengdeMBP:~ svenweng$ npm -v
1.4.28
- Appium
終于到我們的主角了安裝命令是 npm install -g appium
這里要說明一下,Appium的安裝不能使用sudo几颜。-g是讓npm自動幫我們配置Appium的環(huán)境倍试。
SvenWengdeMBP:~ svenweng$ appium -v
1.4.16
如果你看到了這個東西,就表示你的Appium已經(jīng)完全安裝完畢了蛋哭。網(wǎng)上還有教程說需要安裝一個wd的東西易猫,我不知道這個是干什么的,當然我也安裝了具壮,npm install wd准颓。很簡單的安裝
檢查Appium的配置是否正確
執(zhí)行命令appium-doctor,你如果看到一下的界面棺妓,就表示已經(jīng)正確的安裝完畢了
SvenWengdeMBP:~ svenweng$ appium-doctor
Running iOS Checks
? Xcode is installed at /Applications/Xcode.app/Contents/Developer
? Xcode Command Line Tools are installed.
? DevToolsSecurity is enabled.
? The Authorization DB is set up properly.
? Node binary found at /usr/local/bin/node
? iOS Checks were successful.
Running Android Checks
? ANDROID_HOME is set to "/Users/svenweng/Desktop/Application/adt-bundle-mac-x86_64-20131030/sdk"
? JAVA_HOME is set to "/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home."
? ADB exists at /Users/svenweng/Desktop/Application/adt-bundle-mac-x86_64-20131030/sdk/platform-tools/adb
? Android exists at /Users/svenweng/Desktop/Application/adt-bundle-mac-x86_64-20131030/sdk/tools/android
? Emulator exists at /Users/svenweng/Desktop/Application/adt-bundle-mac-x86_64-20131030/sdk/tools/emulator
? Android Checks were successful.? All Checks were successful
如果某一行簽名不是打鉤攘已,而是一個紅叉叉,那就表示那個配置沒有安裝正確
疑問
理論上我的Appium安裝是正確的怜跑,但是我運行appium的時候出現(xiàn)了下面的一大串錯誤
SvenWengdeMBP:~ svenweng$ appium
error: uncaughtException: fn must be a functionSee http://goo.gl/916lJJ
date=Sat Nov 21 2015 10:37:25 GMT+0800 (HKT), pid=2504, uid=501, gid=20, cwd=/usr/local/lib/node_modules/appium, execPath=/usr/local/bin/node, version=v0.10.34, argv=[node, /usr/local/bin/appium], rss=103559168, heapTotal=86062080, heapUsed=56309664, loadavg=[1.6328125, 1.86767578125, 1.81103515625], uptime=39552, trace=[column=15, file=/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/node_modules/bluebird/js/main/promisify.js, function=Function.Promise.promisify, line=268, method=Promise.promisify, native=false, column=13, file=lib/fs.js, function=, line=46, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=11, file=/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/build/lib/tempdir.js, function=, line=12, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=19, file=/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/build/index.js, function=, line=11, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=42, file=lib/proxy.js, function=, line=2, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=17, file=/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/build/index.js, function=, line=9, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false, column=12, file=module.js, function=Function.Module._load, line=312, method=Module._load, native=false, column=17, file=module.js, function=Module.require, line=364, method=require, native=false, column=17, file=module.js, function=require, line=380, method=null, native=false, column=28, file=lib/chromedriver.js, function=, line=3, method=null, native=false, column=26, file=module.js, function=Module._compile, line=456, method=_compile, native=false, column=10, file=module.js, function=Object.Module._extensions..js, line=474, method=Module._extensions..js, native=false, column=32, file=module.js, function=Module.load, line=356, method=load, native=false], stack=[TypeError: fn must be a function, , See http://goo.gl/916lJJ, , at Function.Promise.promisify (/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/node_modules/bluebird/js/main/promisify.js:268:15), at Object.<anonymous> (lib/fs.js:46:13), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/build/lib/tempdir.js:12:11), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/node_modules/appium-support/build/index.js:11:19), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (lib/proxy.js:2:42), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/node_modules/appium-jsonwp-proxy/build/index.js:9:17), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32), at Function.Module._load (module.js:312:12), at Module.require (module.js:364:17), at require (module.js:380:17), at Object.<anonymous> (lib/chromedriver.js:3:28), at Module._compile (module.js:456:26), at Object.Module._extensions..js (module.js:474:10), at Module.load (module.js:356:32)]
求大神給一個解答吧
2015-11-21下午17:28分補充
折騰了一天样勃,終于把問題搞定了,問題的原因是因為node的版本太舊了導致的性芬,原因分析在這個鏈接上(點我)峡眶,再說說今天自己折騰過程中遇到的問題吧,我在網(wǎng)上搜索帖子的時候說需要吧node卸載了才能升級(我真是天真)植锉。于是按照步驟手賤刪除了一些不應該刪除的東西辫樱,結(jié)果搞的很亂,思路都亂了俊庇,不知道從何下手狮暑。于是我就去睡了一覺,醒來重新折騰辉饱,重新去官網(wǎng)下了一個node的安裝包搬男,把之前干掉的node環(huán)境重新部署好。再使用npm install -g appium的時候彭沼,一直會出現(xiàn)這個問題
SvenWengdeMBP:~ svenweng$ npm install -g appium
npm ERR! tar.unpack unzip error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-10484-941ff227/registry.npmjs.org/appium-uiauto/-/appium-uiauto-1.10.10.tgz
npm ERR! tar.unpack unzip error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-10484-941ff227/registry.npmjs.org/appium-instruments/-/appium-instruments-2.0.6.tgz
loadRequestedDeps → netwo ? ╢███████████████████████████████?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????╟
^C
SvenWengdeMBP:~ svenweng$ sudo chmod -r 777 /usr/local
Password:
chmod: 777: No such file or directory
SvenWengdeMBP:~ svenweng$ sudo chmod -R 777 /usr/local
SvenWengdeMBP:~ svenweng$ npm install -g appium
loadRequestedDeps → netwo ▄ ╢███████████████████████████████?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????╟
^C
SvenWengdeMBP:~ svenweng$ npm install -g appium
npm ERR! tar.unpack unzip error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-13599-e762bf07/registry.npmjs.org/hoek/-/hoek-2.16.3.tgz
npm ERR! tar.unpack untar error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-13599-e762bf07/registry.npmjs.org/hoek/-/hoek-2.16.3.tgz
npm ERR! tar.unpack unzip error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-13599-e762bf07/registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.8.tgz
npm ERR! tar.unpack untar error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-13599-e762bf07/registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.8.tgz
npm ERR! tar.unpack unzip error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-13599-e762bf07/registry.npmjs.org/core-js/-/core-js-0.9.18.tgz
npm ERR! tar.unpack unzip error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-13599-e762bf07/registry.npmjs.org/appium-adb/-/appium-adb-1.7.5.tgz
npm ERR! tar.unpack unzip error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-13599-e762bf07/registry.npmjs.org/appium-instruments/-/appium-instruments-2.0.6.tgz
npm ERR! tar.unpack unzip error /var/folders/hm/04tcnt812v909nysd8jgl0100000gn/T/npm-13599-e762bf07/registry.npmjs.org/appium-uiauto/-/appium-uiauto-1.10.10.tgz
npm ERR! Darwin 15.0.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "appium"
npm ERR! node v5.1.0
npm ERR! npm v3.3.12
npm ERR! code Z_BUF_ERROR
npm ERR! errno -5npm ERR! unexpected end of file
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! https://github.com/npm/npm/issuesnpm ERR! Please include the following file with any support request:
npm ERR! /Users/svenweng/npm-debug.log
每次安裝到一半都安裝不下去缔逛,我的電腦也是翻墻的,按道理應該也都能下載才對,具體詳細的原因請恕我是小白褐奴,不太懂這個按脚。不過我換了一個下載源就把這個問題搞定了,這里發(fā)出來歉糜,希望下次有遇到這種問題的朋友不會在這個地方浪費太多時間。命令是這個:npm -g --registry http://registry.cnpmjs.org install appium
前前后后折騰了差不多一周的環(huán)境望众,終于把環(huán)境的問題搞定了匪补,希望能夠更深入的學習,也給自己一個勉勵烂翰。