亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Android自動(dòng)化測(cè)試-從入門到入門(7)UI Automator

Dean / 3345人閱讀

摘要:檢查操作的結(jié)果是否符合預(yù)期。大家在實(shí)際編寫自動(dòng)化測(cè)試腳本時(shí)可以靈活選用。

到目前為止,我們已經(jīng)完成了對(duì)Espresso的介紹。從之前的文章我們可以看到,Espresso對(duì)Android APP的自動(dòng)化測(cè)試提供了一系列非常強(qiáng)大的工具和方法。

現(xiàn)在試想這樣一個(gè)場(chǎng)景:我們?cè)贏PP中有一個(gè)更改頭像的功能,此時(shí)我們需要調(diào)用系統(tǒng)相機(jī)進(jìn)行拍照,然后再回到APP提交拍好的照片。在這種場(chǎng)景下,我們需要從自己的APP跳轉(zhuǎn)到其他的APP,而這種跳轉(zhuǎn)的交互在產(chǎn)品中是經(jīng)常會(huì)發(fā)生的。

Espresso并沒有對(duì)這種跨APP的交互測(cè)試提供支持。我們無法在腳本中通過Espresso獲取到非自己APP之外其他APP(或者系統(tǒng)界面)的UI組件。這時(shí),我們就需要用到Android提供的UI Automator來進(jìn)行自動(dòng)化測(cè)試。

配置

想要使用UI Automator,只需要添加如下依賴:

dependencies {
    ...
    androidTestCompile "com.android.support.test.uiautomator:uiautomator-v18:2.1.1"
}

UI Automator僅支持Android 4.3(API Level 18)及以上版本。

可行性探索

在使用UI Automator編寫測(cè)試腳本之前,我們需要對(duì)當(dāng)前測(cè)試用例是否可以用UI Automator進(jìn)行測(cè)試做一些探索。簡(jiǎn)單來說,就是要確保我們需要的界面元素是否都能找到、希望出發(fā)的操作是否都支持。

確定可行性的方法也很簡(jiǎn)單,只要確保我們需要操作的UI元素有可以進(jìn)行匹配的屬性(這一點(diǎn)類似于Espresso),比如唯一的ID,text等等。我們可以按照該系列第四篇對(duì)uiautomatorviewer的介紹來使用Android提供的uiautomatorviewer工具,對(duì)測(cè)試用例中的各個(gè)頁面,尤其是跨APP交互的頁面中的各個(gè)UI元素進(jìn)行分析,確保每個(gè)我們需要操作的元素都有相應(yīng)可以匹配的屬性值,以便于我們可以通過腳本找到相應(yīng)的元素。

對(duì)此,Android官方對(duì)我們開發(fā)者也提出了一些針對(duì)自動(dòng)化測(cè)試的建議,便于我們?cè)陂_發(fā)時(shí)采用:

對(duì)于ImageView, ImageButton, CheckBox這些控件,對(duì)其設(shè)置android:contentDescription屬性。

對(duì)于EditText,設(shè)置其android:hint屬性。

對(duì)于其他有交互作用但沒有顯式文本的控件(比方說可以點(diǎn)擊的icon之類),設(shè)置其android:hint屬性。

以上這些建議的目的,無非就是可以讓我們通過自動(dòng)化測(cè)試API去找到頁面上的控件。

UI Automator測(cè)試流程

使用UI Automator進(jìn)行腳本編寫的一些前置條件和Espresso基本類似,實(shí)際上,我們基于之前幾篇文章的配置就可以直接進(jìn)行UI Automator的編寫。

采用UI Automator的過程如下:

獲得一個(gè)UiDevice對(duì)象,代表我們正在執(zhí)行測(cè)試的設(shè)備。該對(duì)象可以通過一個(gè)getInstance()方法獲取,入?yún)橐粋€(gè)Instrumentation對(duì)象:

UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());

通過findObject()方法獲取到一個(gè)UiObject對(duì)象,代表我們需要執(zhí)行測(cè)試的UI組件。

對(duì)該UI組件執(zhí)行一系列操作。

檢查操作的結(jié)果是否符合預(yù)期。

整個(gè)流程和Espresso基本類似,除了增加了第一項(xiàng):首先獲得一個(gè)UiDevice對(duì)象。這一點(diǎn)也容易理解,為了要支持跨APP的測(cè)試,我們就不能只從APP層面而是需要從整個(gè)設(shè)備層面來進(jìn)行測(cè)試了,因此也是首先需要獲取設(shè)備對(duì)象,再執(zhí)行相關(guān)的操作。

獲取UI組件

根據(jù)如上所說,我們是通過UiDevice來調(diào)用findObject()方法來獲取到我們想要執(zhí)行操作的UI組件。我們來看一下這個(gè)方法的聲明:

/**
 * Returns a UiObject which represents a view that matches the specified selector criteria.
 *
 * @param selector
 * @return UiObject object
 */
public UiObject findObject(UiSelector selector) {
    return new UiObject(this, selector);
}

從如上聲明可以看出,findObject()方法接受了一個(gè)UiSelector對(duì)象,返回了我們需要的UiObject對(duì)象。在這里,UiSelector類似于Espresso中的Matcher,也是指定了某種匹配規(guī)則,UI Automator會(huì)按照UiSelector指定的規(guī)則從當(dāng)前UI上進(jìn)行控件的查找。不同于Espresso的是,如果找到多個(gè)滿足規(guī)則的控件,則會(huì)返回第一個(gè)控件。如果沒有控件滿足當(dāng)前指定的規(guī)則,則會(huì)拋出一個(gè)UiAutomatorObjectNotFoundException異常。

Espresso類似,我們可以通過IDtext等屬性來進(jìn)行控件的查找,同時(shí)也可以指定目標(biāo)控件的類型??梢灾付ㄒ粋€(gè)規(guī)則,也可以通過鏈?zhǔn)秸{(diào)用指定多個(gè)規(guī)則。比如:

UiObject mCameraSureBtn = mDevice.findObject(new UiSelector().resourceId("com.android.camera:id/v6_btn_done")
                .className("android.widget.ImageView"));

這行代碼的UiSelector構(gòu)建就是采用了如下兩個(gè)組合規(guī)則:

控件ID"com.android.camera:id/v6_btn_done",這個(gè)ID是從某個(gè)MIUI版本系統(tǒng)的系統(tǒng)相機(jī)獲取的,對(duì)應(yīng)于拍照按鈕;

控件類型為ImageView

除了UiObject之外,UI Automator還提供了其他的UI對(duì)象,比如UiCollection對(duì)象可以對(duì)一組控件之間進(jìn)行操作,對(duì)布局之間的包含關(guān)系做了支持;比如UiScrollable對(duì)象支持了對(duì)可滑動(dòng)組件的支持。這些組件的用法大同小異,可以自行參考API接口。

執(zhí)行操作

找到了我們需要的控件,接下來該對(duì)控件進(jìn)行操作了!

UiObject提供了一系列方法用來執(zhí)行各種各樣的操作。比如:

click():點(diǎn)擊控件中心;

dragTo():拖動(dòng)控件到指定位置;

setText():對(duì)可輸入控件設(shè)置文本;

swipeUp():對(duì)控件執(zhí)行上滑操作。類似地,swipeDown(), swipeLeft()swipeRight()可以執(zhí)行相應(yīng)的操作

這一部分也是比較簡(jiǎn)單,和Espresso的用法大體類似,只是API層面的區(qū)別。具體的可以在使用的時(shí)候查看API文檔。

檢查結(jié)果

執(zhí)行一系列操作之后,我們需要對(duì)操作的結(jié)果進(jìn)行驗(yàn)證了!
對(duì)于結(jié)果的驗(yàn)證,我們可以使用之前說到的一系列Assert方法了。比如說,我們需要檢測(cè)某個(gè)控件的文字:

assertEquals(TargetText, mUiObject.getText())

便可以這樣進(jìn)行執(zhí)行。

總結(jié)

從該篇文章來看,UI Automator的使用方法和Espresso基本相同,整體的思路也是完全一致,只是一個(gè)對(duì)APP內(nèi)部提供了很好的支持,另一個(gè)對(duì)跨APP提供了支持。大家在實(shí)際編寫自動(dòng)化測(cè)試腳本時(shí)可以靈活選用。

附錄

Android自動(dòng)化測(cè)試-從入門到入門(1) Hello Testing!
Android自動(dòng)化測(cè)試-從入門到入門(2) Testing APIs
Android自動(dòng)化測(cè)試-從入門到入門(3) Espresso入門
Android自動(dòng)化測(cè)試-從入門到入門(4) uiautomatorviewer
Android自動(dòng)化測(cè)試-從入門到入門(5) AdapterView的測(cè)試
Android自動(dòng)化測(cè)試-從入門到入門(6) 會(huì)玩的Espresso
Android自動(dòng)化測(cè)試-從入門到入門(7) UI Automator

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/65624.html

相關(guān)文章

  • Android動(dòng)化測(cè)試-入門入門(2)Testing APIs

    摘要:標(biāo)識(shí)一個(gè)測(cè)試方法。附錄自動(dòng)化測(cè)試從入門到入門自動(dòng)化測(cè)試從入門到入門自動(dòng)化測(cè)試從入門到入門入門自動(dòng)化測(cè)試從入門到入門自動(dòng)化測(cè)試從入門到入門的測(cè)試自動(dòng)化測(cè)試從入門到入門會(huì)玩的自動(dòng)化測(cè)試從入門到入門 根據(jù)該系列文章的第一篇:Hello Testing,大家已經(jīng)對(duì)整個(gè)自動(dòng)化測(cè)試運(yùn)行流程有了一個(gè)基本的了解,接下來我們?cè)摷芯﹃P(guān)注具體的腳本實(shí)現(xiàn)了!在具體實(shí)現(xiàn)之前,我們先來了解一下Android提...

    Meathill 評(píng)論0 收藏0
  • Android動(dòng)化測(cè)試-入門入門(4)uiautomatorviewer

    摘要:右下角部分顯示當(dāng)前選中控件的各個(gè)屬性。然后,向這個(gè)中輸入賬號(hào)信息就完成了一個(gè)表單的輸入。我們可以根據(jù)屬性區(qū)域顯示的來進(jìn)行匹配賬號(hào)小總結(jié)所提供的界面簡(jiǎn)單,使用方便,對(duì)于我們的自動(dòng)化測(cè)試來說是一個(gè)很好的輔助工具。 我們用如下一行代碼來回顧一下之前介紹過的內(nèi)容: import static android.support.test.espresso.Espresso.onView; impo...

    winterdawn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<