1渊啰、Appium簡介
Appium是一個開源測試自動化框架,可用于原生,混合和移動Web應(yīng)用程序測試焙贷。
它使用WebDriver協(xié)議驅(qū)動IOS撵割,Android和Windows應(yīng)用程序。
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
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?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?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方法編寫自動化測試用例
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
命令?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
5.2.2.2.使用“高級選項”啟動服務(wù)器(Advance)踱承,一般不需要改動
注意:如果在啟動app或者服務(wù)器時提示找不到Android-Home,點擊Edit Configurations,查看Android-HOME是否正確,修改正確之后點擊保存
5.2.2.3.服務(wù)器預(yù)設(shè)(Presets)
使用高級服務(wù)器選項哨免,就可以保存配置以備以后使用茎活。只需將preset保存在“Advanced”選項卡上,就能夠在“preset”選項卡中回憶并啟動服務(wù)器琢唾。
5.2.2.4.鏈接APP進行元素定位調(diào)試
注意:鏈接的是App载荔,進行純H5測試請使用Web頁面直接定位元素,只有進行原生元素定位才需要使用
Step1:點擊右上角放大鏡
Step2:點擊采桃,填寫Capability的JSON
{
?"platformName": "Android",
?"deviceName": "10.101.54.105",
?"platformVersion": "8.0",
?"appPackage": "com.xxxx.android",
?"appActivity": ".LoadingActivity"
}
點擊Save As…懒熙,下次直接可以在Saved
Capability Set2中找到方便使用
Step 3 點擊Start Session即可打開同程旅游
左邊是應(yīng)用程序的屏幕截圖,可以在應(yīng)用程序中使用鼠標(biāo)來模擬操作普办。
中間是應(yīng)用程序的層次結(jié)構(gòu)工扎,表示為XML。您可以通過單擊它衔蹲,或者通過點擊屏幕快照視圖中的元素來導(dǎo)航這棵樹肢娘,會被強調(diào)。
右側(cè)是細節(jié)視圖舆驶,當(dāng)一個元素被突出顯示時橱健,它的信息會出現(xiàn)在檢查器右側(cè)的細節(jié)視圖中。這個細節(jié)視圖包括對元素的潛在操作沙廉,以及元素屬性的表拘荡。這些屬性在決定如何使用特定的Appium定位策略訪問元素時是有價值的。選擇一個元素撬陵,還可以“Tap”元素俱病,或者“發(fā)送鍵”到元素(如果它是一個文本字段)。
如果手機上所處頁面和快照不一致時袱结,刷新截圖快照
輸入定位語法調(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
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
其他:
中文輸入
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)鍵字