安卓平臺自動化測試之Appium工具

1渊啰、Appium簡介

Appium是一個開源測試自動化框架,可用于原生,混合和移動Web應(yīng)用程序測試焙贷。

它使用WebDriver協(xié)議驅(qū)動IOS撵割,Android和Windows應(yīng)用程序。

Appium官網(wǎng)

Appiumgithub主頁

官方中文文檔

Appium官方論壇

Testerhome中文社區(qū)

2辙芍、Appium優(yōu)勢

可以跨平臺同時支持android啡彬、ios

支持多種語言,java故硅、python庶灿、php、Ruby等等

不用為復(fù)雜的環(huán)境發(fā)愁

如果你有selenium經(jīng)驗吃衅,直接上手往踢。

3、Appium架構(gòu)原理

運行原理

我們的電腦(client)上運行自動化測試腳本徘层,調(diào)用的是webdriver的接口峻呕,appium server接收到我們client上發(fā)送過來的命令后他會將這些命令轉(zhuǎn)換為UIautomator認識的命令,然后由UIautomator來在設(shè)備上執(zhí)行自動化趣效。

Appium的架構(gòu)原理如圖所示瘦癌,由客戶端(Appium Client)和服務(wù)器(Appium Server)兩部分組成,客戶端與服務(wù)器端通過JSON Wire Protocol進行通信跷敬。


Appium框架結(jié)構(gòu)

Appium

Appium服務(wù)器是Appium框架的核心讯私。它是一個基于Node.js實現(xiàn)的HTTP服務(wù)器。Appium服務(wù)器的主要功能是接受從Appium客戶端發(fā)起的連接西傀,監(jiān)聽從客戶端發(fā)送來的命令斤寇,將命令發(fā)送給bootstrap.jar(iOS手機為bootstrap.js)執(zhí)行,并將命令的執(zhí)行結(jié)果通過HTTP應(yīng)答反饋給Appium客戶端拥褂。

Bootstrap.jar

Bootstrap.jar是在Android手機上運行的一個應(yīng)用程序抡驼,它在手機上扮演TCP服務(wù)器的角色。當(dāng)Appium服務(wù)器需要運行命令時肿仑,Appium服務(wù)器會與Bootstrap.jar建立TCP通信致盟,并把命令發(fā)送給Bootstrap.jar碎税;Bootstrap.jar負責(zé)運行測試命令。

Appium客戶端

它主要是指實現(xiàn)了Appium功能的WebDriver協(xié)議的客戶端Library馏锡,它負責(zé)與Appium服務(wù)器建立連接雷蹂,并將測試腳本的指令發(fā)送到Appium服務(wù)器。現(xiàn)有的客戶端Library有多種語言的實現(xiàn)杯道,包括Ruby匪煌、Python、Java党巾、JavaScript(Node.js)萎庭、Object C、PHP和C#齿拂。Appium的測試是在這些Library的基礎(chǔ)上進行開發(fā)的驳规。

4、Appium組件

Appium Server

Appium Server就是Appium的服務(wù)端——一個web接口服務(wù)署海,使用Node.js實現(xiàn)吗购。

安裝完nodejs后執(zhí)行$ npm install -g appium既可以安裝appium-server

Appium Desktop

Appium Desktop是一款適用于Mac,Windows和Linux的開源應(yīng)用程序砸狞,它以美觀而靈活的用戶界面為您提供Appium自動化服務(wù)器的強大功能捻勉。 它是幾個Appium相關(guān)工具的組合:

1.Appium Server的圖形界面。 您可以設(shè)置選項刀森,啟動/停止服務(wù)器踱启,查看日志等不需要使用Node 的NPM來安裝Appium,因為Node運行時與Appium Desktop捆綁在一起研底。

2.可以使用Inspector查看應(yīng)用程序的元素禽捆,獲取有關(guān)它們的基本信息,并與它們進行基本的交互飘哨。

Appium Desktop與Appium不同胚想。 Appium Desktop是Appium的圖形前端,帶有其他工具芽隆。 Appium Desktop以其自己的節(jié)奏發(fā)布浊服,并擁有自己的版本控制系統(tǒng)。 就像國內(nèi)很多定制的Android系統(tǒng)有自己版本號胚吁,但是都是基于一個Android系統(tǒng)版本封裝的牙躺。版本號不一定與Andriod原生系統(tǒng)版本號一致。如:魅族的flyme6.0系統(tǒng)的內(nèi)核是Android 5.1

另外一個重要原因Appium的搭建環(huán)境較為復(fù)雜所以才有了appium-desktop腕扶,只需要傻瓜式安裝孽拷,Appium-desktop集成了nodejs,appium-server,解決了nodejs與appium-server的版本兼容問題


appium-desktop

Appium?GUI

Appium GUI是Appium desktop的前身。

這個也是把Appium server封裝成了一個圖形界面半抱,降低使用門檻脓恕,如同最初的操作系統(tǒng)Dos都是敲命令膜宋,后面都是圖形界面操作系統(tǒng),如Windows系統(tǒng)炼幔。很多初學(xué)者對下面這個界面應(yīng)該不陌生吧秋茫,這個就是Windows版本的Appium GUI界面。測試人員可以手動啟動乃秀,配置相關(guān)server 服務(wù)肛著,如果不用這個啟動的話,需要命令啟動服務(wù)跺讯。因為大部分教程都是基于這個GUI來講解的枢贿,所以很多人一說Appium就認為是這個。

該產(chǎn)品的Windows版本在2015年的AppiumForWindows_1_4_16_1.zip之后就停止更新了刀脏。目前版本可以使用局荚,但是封裝的不是最新的Appium版本,而是1.4.16版本火本。如果要使用最新的桌面版需要使用Appium Desktop。


appium-GUI

Appium?Clients

因為Appium是一個C/S結(jié)構(gòu)聪建,有了服務(wù)端的肯定還有客戶端钙畔,Appium

Clients就是客戶端,它會給服務(wù)端Appium Server發(fā)送請求會話來執(zhí)行自動化任務(wù)金麸。就像我們?yōu)g覽器訪問網(wǎng)頁擎析,瀏覽器是客戶端,通過操作發(fā)送請求服務(wù)器來獲取數(shù)據(jù)挥下。我們可以使用不同的客戶端瀏覽器(IE揍魂,F(xiàn)irefox,Chrome)訪問一個網(wǎng)站。 Appium客戶端可以使用不同的語言來實現(xiàn)棚瘟,如Python现斋,java等。具體詳見下表:

說白了就是和selenium一樣有一個Appium的庫偎蘸,通過Appiim方法編寫自動化測試用例

appium-clients

5庄蹋、環(huán)境搭建

Node.js

Nodejs下載地址http://nodejs.cn/

Appium

Appium-doctor

Appium-desktop

Appium-Python-Client(Rotbotframework自帶,無需安裝)

Python

JDK

Andriod?SDK

安裝Appium-desktop則不需要安裝nodejs和appium迷雪,且appium-desktop不需要配置環(huán)境變量

5.1.1Appium 安裝

Appium Server其實可以通過命令 npm install -g appium來安裝限书。不過由于眾所周知的網(wǎng)絡(luò)原因,直接使用這樣安裝會非常非常慢章咧,甚至?xí)惭b失敗倦西,所以我們可以使用國內(nèi)鏡像來安裝。

選用的鏡像是?淘寶NPM鏡像

在安裝之前需要先安裝下cnpm

npm?install?-g?cnpm?--registry=https://registry.npm.taobao.org

再使用如下命令安裝最新版

cnpm?install?-g?appium

或者使用指定安裝版本

cnpm?install?appium@1.15.1?-g

5.1.2Appium 配置

安裝完成之后可以使用如下命令查看appium的安裝路徑

使用where appium

apium安裝成功

命令?appium即可啟動appium服務(wù)赁严,appium?-v查看版本

注意:如果裝了Appium-desktop不要配置Appium-desktop的環(huán)境變量扰柠,否則運行appium命令時會彈出Appium-desktop的界面

5.1.3Appium退出

按鍵Ctrl+c 選擇y 即可退出

5.2.1安裝Appium-desktop

下載地址:https://github.com/appium/appium-desktop/releases

Appium-desktop工具已封裝了Appium server和Node.js依賴環(huán)境粉铐。appium-desktop是我們初學(xué)者最容易上手的工具。唯一的缺陷不能通過命令行啟動服務(wù)耻矮,所以安裝了Appium-sever秦躯,可以通過CMD來啟動appium服務(wù),多用于同時使用多臺設(shè)備進行兼容性測試時需要啟動多個服務(wù)

5.2.2使用Appium-desktop

5.2.2.1啟動服務(wù)

Host輸入127.0.0.1裆装,port輸入4723點擊Start?Sever

注意:一定要以管理員身份啟動Appium-desktop


appium啟動


5.2.2.2.使用“高級選項”啟動服務(wù)器(Advance)踱承,一般不需要改動


advance

注意:如果在啟動app或者服務(wù)器時提示找不到Android-Home,點擊Edit Configurations,查看Android-HOME是否正確,修改正確之后點擊保存

5.2.2.3.服務(wù)器預(yù)設(shè)(Presets)

使用高級服務(wù)器選項哨免,就可以保存配置以備以后使用茎活。只需將preset保存在“Advanced”選項卡上,就能夠在“preset”選項卡中回憶并啟動服務(wù)器琢唾。



預(yù)設(shè)server


5.2.2.4.鏈接APP進行元素定位調(diào)試

注意:鏈接的是App载荔,進行純H5測試請使用Web頁面直接定位元素,只有進行原生元素定位才需要使用

Step1:點擊右上角放大鏡


調(diào)試入口

Step2:點擊采桃,填寫Capability的JSON


編輯Capability

{

?"platformName": "Android",

?"deviceName": "10.101.54.105",

?"platformVersion": "8.0",

?"appPackage": "com.xxxx.android",

?"appActivity": ".LoadingActivity"

}

點擊Save As…懒熙,下次直接可以在Saved


save

Capability Set2中找到方便使用


Step 3 點擊Start Session即可打開同程旅游


左邊是應(yīng)用程序的屏幕截圖,可以在應(yīng)用程序中使用鼠標(biāo)來模擬操作普办。

中間是應(yīng)用程序的層次結(jié)構(gòu)工扎,表示為XML。您可以通過單擊它衔蹲,或者通過點擊屏幕快照視圖中的元素來導(dǎo)航這棵樹肢娘,會被強調(diào)。

appium-desktop調(diào)試界面

右側(cè)是細節(jié)視圖舆驶,當(dāng)一個元素被突出顯示時橱健,它的信息會出現(xiàn)在檢查器右側(cè)的細節(jié)視圖中。這個細節(jié)視圖包括對元素的潛在操作沙廉,以及元素屬性的表拘荡。這些屬性在決定如何使用特定的Appium定位策略訪問元素時是有價值的。選擇一個元素撬陵,還可以“Tap”元素俱病,或者“發(fā)送鍵”到元素(如果它是一個文本字段)。


xml樹

如果手機上所處頁面和快照不一致時袱结,刷新截圖快照


刷新

輸入定位語法調(diào)試亮隙,確認定位正確




錄制腳本,注意一定要用紅框里面的Tap垢夹、send可以去操作元素溢吻,直接手機上操作元素是沒什么用的,一般不會使用該功能


錄制按鈕


操作

6.H5自動化測試

6.1純H5啟動Chrome常見問題

1)Appium安裝失敗,打開運行USB安裝促王,關(guān)掉手機自動鎖屏

Starting?test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自動化.H5頁面測試

2019102618:49:50.377 :? FAIL : No application isopen

2019102618:49:50.379 :? WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open

2019102618:49:50.382 :? FAIL :

WebDriverException: Message: An unknown server-side error occurred while processing the

command. Original error:

Error

executing adbExec.

Original error: 'Command ''C:\\Program Files

(x86)\\Android\\platform-tools\\adb.exe' -P 5037 -s

33f6c01a0704

shell pm install -g /data/local/tmp/appium_cache/3d97225b036c28750562ef8962defee6b1af19a4.apk'

exited

with code 1'; Stderr: 'Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]'; Code: '1'

2)無法連接默認證書犀盟,以管理員身份運行該Appium可解決

Starting?test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自動化.H5頁面測試

2019102618:53:14.880 :? FAIL : No application isopen

2019102618:53:14.881 :? WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open

2019102618:53:14.883 :? FAIL :

WebDriverException: Message: An unknown server-side error occurred while processing the

command. Original error: Could?not

?sign with default certificate. Original error Command ''C:\\Program

Files\\Java\\jdk-13.0.1\\bin\\java.exe' -jar 'C:\\Program Files\\Ap

pium\\resources\\app\\node_modules\\appium\\node_modules\\appium-adb\\jars\\sign.jar' C:\\Users\\lenovo\\AppData\\Local\\T

emp\\2019926-14192-1e1rvyx.e7xbi\\appium-uiautomator2-server-debug-androidTest.apk

--override' exited with code 1

Endingtest:?? WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自動化.H5頁面測試

3)手機自帶瀏覽器不是chrome,安裝Chrome瀏覽器蝇狼,不能直接用自帶瀏覽器阅畴,自帶瀏覽器沒有對外開放Web調(diào)試

Starting?test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自動化.H5頁面測試

2019102618:57:56.765 :? FAIL : No application isopen

2019102618:57:56.767 :? WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open

2019102618:57:56.769 :? FAIL :

WebDriverException: Message: An unknown server-side error occurred while processing the

command. Original error: 'app'?option is required for reinstall

Endingtest:?? WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自動化.H5頁面測試

4)Chrome版本與driver不對應(yīng),替換Appium里面的driver

Starting

test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自動化.H5頁面測試

2019102620:05:11.368 :? FAIL : No application isopen

2019102620:05:11.369 :? WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open

2019102620:05:11.372 :? FAIL :

WebDriverException: Message: An unknown server-side error occurred while processing the

command. Original error: No Chromedriver found

that can automate Chrome '78.0.3904'. See

https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md

for more details. You could also try to enable automated chromedrivers

download server feature

Endingtest:?? WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自動化.H5頁面測試

1.appium服務(wù)chromedriver驅(qū)動文件的位置:appium服務(wù)程序的根目錄下 .\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win

2.也可以通過webdriver.Remote第二參數(shù)中的,修改屬性‘chromedriverExecutableDir’指定使用chromedriver驅(qū)動位置(desired_caps[‘chromedriverExecutableDir’]=‘D:/WanleAutoTestForH5/ChromeDrivers/78.0.3904.70’迅耘,注意是目錄贱枣,不需要寫到chromedriver.exe)

6.2 H5自動化測試

Step1:連接手機

Step2:在手機上按照Chrome瀏覽并且下載相應(yīng)版本driver

Step3:連接手機上的Chrome


Demo

Open?Application關(guān)鍵字本質(zhì)上只有兩個參數(shù),remote_url為Appium服務(wù)颤专、desired_caps是一個可變關(guān)鍵字參數(shù)纽哥,所以我們使用關(guān)鍵字時才可以輸入很多key-value格式的參數(shù)


關(guān)于desired_caps

desired_caps要求一個Capability的設(shè)置

那么,什么是Capability

desired capability的功能是配置Appium會話栖秕。他們告訴Appium服務(wù)器想要自動化的平臺和應(yīng)用程序春塌。

Desired Capabilities是一組設(shè)置的鍵值對的集合,其中鍵對應(yīng)設(shè)置的名稱簇捍,而值對應(yīng)設(shè)置的值只壳。(如:"platformName": "Android")Desired Capabilities主要用于通知Appium服務(wù)器建立需要的Session。

公用Capability

公用Capability


Android Capability


IOS Capability

其他:

中文輸入

Open Application傳入unicodeKeyboard=true? resetKeyboard=true

允許創(chuàng)建ChromeDriverSessions暑塑,用于原生嵌入H5時吼句,切入H5頁面進行H5自動化

recreateChromeDriverSessions=true

1)H5元素定位

和Web自動化一樣直接在WebChrome中打開進行定位,但是親測只支持css與xpath定位梯投,其他不可用

2)元素操作

與Selenium基本一樣input text click element等

3)手機常用特有關(guān)鍵字

Tap(x命辖,y):按照坐標(biāo)點擊

Swipe(x1况毅,y1分蓖,x2,y2):滑動

Press Keycode(keycode)模擬鍵盤輸入尔许,比如搜索框輸入完成之后需回車才能進入下一步

Android Keycode參照下列資料么鹤,IOS不支持使用Keycode模擬鍵盤輸入:

dhttps://www.cnblogs.com/yc-c/p/9014771.html

其他關(guān)鍵字

https://www.bbsmax.com/A/kvJ3r1EXzg/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市味廊,隨后出現(xiàn)的幾起案子蒸甜,更是在濱河造成了極大的恐慌,老刑警劉巖余佛,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柠新,死亡現(xiàn)場離奇詭異,居然都是意外死亡辉巡,警方通過查閱死者的電腦和手機恨憎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人憔恳,你說我怎么就攤上這事瓤荔。” “怎么了钥组?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵输硝,是天一觀的道長。 經(jīng)常有香客問我程梦,道長点把,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任作烟,我火速辦了婚禮愉粤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拿撩。我一直安慰自己衣厘,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布压恒。 她就那樣靜靜地躺著影暴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪探赫。 梳的紋絲不亂的頭發(fā)上型宙,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音伦吠,去河邊找鬼妆兑。 笑死,一個胖子當(dāng)著我的面吹牛毛仪,可吹牛的內(nèi)容都是我干的搁嗓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼箱靴,長吁一口氣:“原來是場噩夢啊……” “哼腺逛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衡怀,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤棍矛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抛杨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體够委,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年怖现,在試婚紗的時候發(fā)現(xiàn)自己被綠了茁帽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脐雪,靈堂內(nèi)的尸體忽然破棺而出厌小,到底是詐尸還是另有隱情,我是刑警寧澤战秋,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布璧亚,位于F島的核電站,受9級特大地震影響脂信,放射性物質(zhì)發(fā)生泄漏癣蟋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一狰闪、第九天 我趴在偏房一處隱蔽的房頂上張望疯搅。 院中可真熱鬧,春花似錦埋泵、人聲如沸享言。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壤短。三九已至,卻和暖如春雁社,著一層夾襖步出監(jiān)牢的瞬間浴井,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工霉撵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留磺浙,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓徒坡,卻偏偏與公主長得像撕氧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子崭参,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

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