Appium學習之路—環(huán)境搭建

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 function

See 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 -5

npm 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/issues

npm 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)境的問題搞定了匪补,希望能夠更深入的學習,也給自己一個勉勵烂翰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夯缺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甘耿,更是在濱河造成了極大的恐慌踊兜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佳恬,死亡現(xiàn)場離奇詭異捏境,居然都是意外死亡,警方通過查閱死者的電腦和手機毁葱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門垫言,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人倾剿,你說我怎么就攤上這事筷频。” “怎么了前痘?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵凛捏,是天一觀的道長。 經(jīng)常有香客問我芹缔,道長坯癣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任最欠,我火速辦了婚禮坡锡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窒所。我一直安慰自己鹉勒,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布吵取。 她就那樣靜靜地躺著禽额,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脯倒,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天实辑,我揣著相機與錄音,去河邊找鬼藻丢。 笑死剪撬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的悠反。 我是一名探鬼主播残黑,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斋否!你這毒婦竟也來了梨水?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茵臭,失蹤者是張志新(化名)和其女友劉穎疫诽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旦委,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡奇徒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缨硝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逼龟。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖追葡,靈堂內(nèi)的尸體忽然破棺而出腺律,到底是詐尸還是另有隱情,我是刑警寧澤宜肉,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布匀钧,位于F島的核電站,受9級特大地震影響谬返,放射性物質(zhì)發(fā)生泄漏之斯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一遣铝、第九天 我趴在偏房一處隱蔽的房頂上張望佑刷。 院中可真熱鬧,春花似錦酿炸、人聲如沸瘫絮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麦萤。三九已至鹿鳖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壮莹,已是汗流浹背翅帜。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留命满,地道東北人涝滴。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像胶台,于是被迫代替她去往敵國和親歼疮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容