UiAutomator自動(dòng)化測(cè)試分析_第1頁(yè)
UiAutomator自動(dòng)化測(cè)試分析_第2頁(yè)
UiAutomator自動(dòng)化測(cè)試分析_第3頁(yè)
UiAutomator自動(dòng)化測(cè)試分析_第4頁(yè)
UiAutomator自動(dòng)化測(cè)試分析_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

UiAutomator自動(dòng)化測(cè)試1UI自動(dòng)化測(cè)試框架介紹測(cè)試框架介紹優(yōu)缺點(diǎn)Monkeyrunner語(yǔ)言:python運(yùn)行環(huán)境:python環(huán)境,pc連接設(shè)備后adb運(yùn)行腳本文件測(cè)試對(duì)象:UI測(cè)試優(yōu)點(diǎn):操作簡(jiǎn)單,可以錄制測(cè)試腳本缺點(diǎn):主要使用坐標(biāo),移植性不強(qiáng),業(yè)務(wù)邏輯判斷較差I(lǐng)nstrumentation語(yǔ)言:java運(yùn)行環(huán)境:adb命令啟動(dòng)或者手機(jī)中直接啟動(dòng)測(cè)試對(duì)象:白盒測(cè)試、UI測(cè)試1、針對(duì)單個(gè)apk測(cè)試2、需要源碼,需要對(duì)apk重新簽名3、需要root權(quán)限Robotium語(yǔ)言:java,基于Instrumentation的封裝運(yùn)行環(huán)境:同Instrumentation測(cè)試對(duì)象:同Instrumentation同InstrumentationUiAutomator語(yǔ)言:java運(yùn)行環(huán)境:pc連接設(shè)備后adb運(yùn)行腳本文件或直接通過(guò)eclipse運(yùn)行測(cè)試對(duì)象:UI測(cè)試優(yōu)點(diǎn):1、簡(jiǎn)單易學(xué),可模擬大部分手工操作2、無(wú)Activity限制,無(wú)需簽名,無(wú)需root權(quán)限3、基于應(yīng)用UI元素控制,靈活精確缺點(diǎn):1、無(wú)法配合OpenGL和HTML5應(yīng)用使用,因?yàn)檫@些應(yīng)用沒有AndroidUI組件2UiAutomator簡(jiǎn)介UiAutomator是google在安卓4.1版本推出的一套基于UI控件的自動(dòng)化測(cè)試框架,可模擬人對(duì)手機(jī)的操作,主要用于UI自動(dòng)化測(cè)試。由下面兩套工具組成:Uiautomatorviewer:掃描、分析待測(cè)應(yīng)用的UI組件的圖像工具(路徑:sdk安裝文件夾\tools\uiautomatorviewer.bat)。Uiautomator:包含功能界面測(cè)試API和自動(dòng)化運(yùn)行測(cè)試用例的引擎的JAVA類庫(kù)。3UiAutomator框架UiDevice代表設(shè)備狀態(tài),可以通過(guò)UiDevice來(lái)檢測(cè)設(shè)備的各種屬性如當(dāng)前屏幕尺寸,同時(shí)也可以進(jìn)行設(shè)備級(jí)別相關(guān)操作:按鈕、拖拽、轉(zhuǎn)換屏幕轉(zhuǎn)向UiSelector代表UI控件搜索的條件,基于對(duì)元素描述的各種屬性,可以獲得該元素控件從而進(jìn)行相關(guān)操作UiObject代表一個(gè)UI控件,通過(guò)UiSelector來(lái)查找UiObjectUiCollection代表控件的集合,通過(guò)UiSelector選取符合條件的元素集合,通常用于遍歷UiScrollable代表可滾動(dòng)控件,模擬水平或者垂直滾動(dòng)的UI元素,當(dāng)元素在屏幕外需要滾動(dòng)屏幕才能看到的情況下需要使用UiScrollable4UiAutomator環(huán)境搭建開發(fā)工具:eclipse

開發(fā)環(huán)境:JDK1.6以上編譯環(huán)境:AndroidSDK、Ant(基于Java的構(gòu)建工具,用于編譯uiatutomator測(cè)試工程,自動(dòng)完成所有的構(gòu)建過(guò)程)5.1UiAutomator對(duì)象之UiDevice通常用于獲取系統(tǒng)的設(shè)備信息、系統(tǒng)按鍵、全局操作等1、獲取坐標(biāo)參數(shù)UiDevice.getInstance().getDisplayHeight()/getDisplayWidth()獲取屏幕高度/寬度2、獲取信息信息,包括屏幕分辨率、亮滅屏狀態(tài)等UiDevice.getInstance().getCurrentActivityName()獲取當(dāng)前界面Activity3、滑動(dòng)、拖拽操作UiDevice.getInstance().drag(startX,startY,endX,endY,steps)

拖拽坐標(biāo)處對(duì)象到另一個(gè)坐標(biāo)4、輸入按鍵UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A)5、系統(tǒng)按鍵UiDevice.getInstance().wakeUp()/sleep()按電源鍵亮屏/滅屏

5.2UiAutomator對(duì)象之UiSelector(1)通常使用UiSelector,通過(guò)各種屬性節(jié)點(diǎn)和關(guān)系來(lái)定位組件。通過(guò)uiautomatorviewer,我們可以找到很多對(duì)象的屬性,可以通過(guò)這些屬性來(lái)定位需要的元素對(duì)象5.3UiAutomator對(duì)象之UiSelector(2)1、通過(guò)text、description屬性定位UiSelector().text(text)//通過(guò)text完全定位UiSelector().description(description)//通過(guò)description完全定位2、通過(guò)resourceId定位UiSelector().resourceId(id)//通過(guò)resourceId定位3、通過(guò)class、package定位這種方式適用于當(dāng)前頁(yè)面上只有一種類型的組件的情況,例如只有一個(gè)ListViewUiSelector().className(className)/packageName(name)4、通過(guò)index、instance定位UiSelector().index(index)/instance(instance)5、使用childSelector()函數(shù)來(lái)嵌套UiSelector對(duì)象UiObjectappItem=newUiObject(newUiSelector().className("android.widget.ListView").instance(1).childSelector(newUiSelector().text("Apps")));//在當(dāng)前界面中查找第一個(gè)ListView中的帶有文本屬性為Apps的子控件。5.4UiAutomator對(duì)象之UIObjectUIObject是UiAutomator的核心屬性之一。它代表了整個(gè)UI界面中的所有對(duì)象元素。功能包括:獲取UI元素,點(diǎn)擊、拖拽、滑動(dòng)、對(duì)象屬性判斷、手勢(shì)等。1、通過(guò)UiSelector對(duì)象獲取對(duì)象元素UiObjectobject1=newUiObject(newUiSelector().text("聯(lián)系人"))2、點(diǎn)擊移動(dòng)操作click()/longClick()點(diǎn)擊對(duì)象/長(zhǎng)按對(duì)象dragTo(destObj,steps)以steps拖動(dòng)對(duì)象到destObj(目標(biāo)位置)3、文本輸入與清除setText(text)/clearTextField()設(shè)置內(nèi)容為text/清除文本4、獲取對(duì)象狀態(tài)exists()/waitForExists(timeout)對(duì)象是否存在/等待對(duì)象出現(xiàn)5、手勢(shì)pinchIn(percent,steps)/pinchOut(percent,steps)雙指向內(nèi)收縮/雙指向外張開5.5UiAutomator對(duì)象之UiCollection通常用于獲取滿足某種搜索條件的組件集合,通過(guò)鏈?zhǔn)剿阉鞔_定最終需要的組件。UiCollection是Uiobject的子類。搜索時(shí)先按照一定的條件枚舉容器類界面所有符合條件的子元素。再?gòu)姆蠗l件的元素中通過(guò)一定的條件進(jìn)一步定位到需要的元素。一般使用容器類組件作為父類,用于尋找不好定位的子元素。PublicUiobjectgetchildByDescription(UiSelectorchildPattern,Stringtext)PublicUiobjectgetchildByText(UiSelectorchildPattern,Stringtext)PublicUiobjectgetchildByInstance(UiSelectorchildPattern,intinstance)UiCollectioncollection=newUiCollection(newUiSelector().className("android.widget.ListView"))UiSelectorchildPattern=newUiSelector().className("android.widget.TextView")UiObjectmusic=collection.getChildByText(childPattern,"Music";)5.6UiAutomator對(duì)象之UiScrollable可以用UiScrollable來(lái)模擬水平或者垂直滾動(dòng)的UI元素。如果需要操作的元素在屏幕外需要滾動(dòng)屏幕才能看到的情況下需要使用UiScrollable。例如,下面的代碼顯示了如何模擬滾動(dòng)到“Settings”菜單并點(diǎn)擊“Abouttablet”菜單的操作:UiScrollablesettingsItem=newUiScrollable(newUiSelector().className("android.widget.ListView"));UiObjectabout=settingsItem.getChildByText(newUiSelector().className("android.widget.LinearLayout"),"Abouttablet");about.click()5.7UiAutomator對(duì)象之UiWatcherUiWatcher用戶處理腳本執(zhí)行過(guò)程中遇到非預(yù)想的步驟,比如測(cè)試過(guò)程中手機(jī)系統(tǒng)自動(dòng)彈出一個(gè)提示框等。1、中斷監(jiān)聽檢查條件PublicbooleancheckForCondition();在測(cè)試框架無(wú)法找到一個(gè)匹配時(shí),使用uiselector測(cè)試框架將自動(dòng)調(diào)用此程序。在超時(shí)未找到匹配項(xiàng)時(shí),調(diào)用checkForCondition()方法查找設(shè)備上的所有已注冊(cè)監(jiān)聽器條件,以此來(lái)處理中斷問(wèn)題保證測(cè)試用例正常運(yùn)行。2、監(jiān)聽器VoidregisterWatcher(Stringname,UiWatcherwatcher)

注冊(cè)一個(gè)監(jiān)聽器,通過(guò)checkForCondition檢查,當(dāng)UiSelector無(wú)法匹配到對(duì)象時(shí),觸發(fā)監(jiān)聽器6UiAutomator運(yùn)行1、編寫測(cè)試用例UiAutomator中的測(cè)試類都要繼承UiAutomatorTestCase,每個(gè)測(cè)試用例的方法的方法名都要以test開頭2、創(chuàng)建build文件androidcreateuitest-project-n<prjname>-t<android-sdk-ID>-p<workspacepath>-n

為工程名-p

為工程路徑-t

為所使用的SDK的id(命令行運(yùn)行Androidlist,查看需要編譯的apilevel對(duì)應(yīng)的id即可)3、修改build文件打開工程目錄,找到build.xml文件,將第2行的help修改為build4、開始編譯,使用ant,通過(guò)build.xml打包生成jarant-buildfile<build.xml文件路徑>5、pushjar包到手機(jī)adbpush<project.jar>/data/local/tmp/6、運(yùn)行測(cè)試adbshelluiatumatorruntest<project.jar>-c<包名>.<類名>[#testname]7UiAutomator快速運(yùn)行上一章節(jié),UiAutomator運(yùn)行步驟較繁瑣,可使用腳本將重復(fù)的2~6步驟封裝起來(lái)。使用已有的腳本工具uiautomatorhelper,自動(dòng)執(zhí)行從創(chuàng)建build文件到運(yùn)行腳本的一系列動(dòng)作,之后在Eclipese上可直接運(yùn)行調(diào)試腳本。Publicstaticvoidmain(String[]args){StringjarName=“Vinsoncontrol”;StringtestClass=“com.androidcontrol.Test_recovery_reconnect”;StringtestName=“test_recovery_reconnect”;StringandroidId=“1”;newUiAutomatorHelper(jarName,testClass,testName,androidId);}8腳本穩(wěn)定性建議1、少用Sleep等待

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論