国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Android自動化測試-從入門到入門(7)UI Automator

Dean / 3271人閱讀

摘要:檢查操作的結果是否符合預期。大家在實際編寫自動化測試腳本時可以靈活選用。

到目前為止,我們已經完成了對Espresso的介紹。從之前的文章我們可以看到,Espresso對Android APP的自動化測試提供了一系列非常強大的工具和方法。

現在試想這樣一個場景:我們在APP中有一個更改頭像的功能,此時我們需要調用系統相機進行拍照,然后再回到APP提交拍好的照片。在這種場景下,我們需要從自己的APP跳轉到其他的APP,而這種跳轉的交互在產品中是經常會發生的。

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

配置

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

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

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

可行性探索

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

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

對此,Android官方對我們開發者也提出了一些針對自動化測試的建議,便于我們在開發時采用:

對于ImageView, ImageButton, CheckBox這些控件,對其設置android:contentDescription屬性。

對于EditText,設置其android:hint屬性。

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

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

UI Automator測試流程

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

采用UI Automator的過程如下:

獲得一個UiDevice對象,代表我們正在執行測試的設備。該對象可以通過一個getInstance()方法獲取,入參為一個Instrumentation對象:

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

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

對該UI組件執行一系列操作。

檢查操作的結果是否符合預期。

整個流程和Espresso基本類似,除了增加了第一項:首先獲得一個UiDevice對象。這一點也容易理解,為了要支持跨APP的測試,我們就不能只從APP層面而是需要從整個設備層面來進行測試了,因此也是首先需要獲取設備對象,再執行相關的操作。

獲取UI組件

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

/**
 * 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()方法接受了一個UiSelector對象,返回了我們需要的UiObject對象。在這里,UiSelector類似于Espresso中的Matcher,也是指定了某種匹配規則,UI Automator會按照UiSelector指定的規則從當前UI上進行控件的查找。不同于Espresso的是,如果找到多個滿足規則的控件,則會返回第一個控件。如果沒有控件滿足當前指定的規則,則會拋出一個UiAutomatorObjectNotFoundException異常。

Espresso類似,我們可以通過IDtext等屬性來進行控件的查找,同時也可以指定目標控件的類型。可以指定一個規則,也可以通過鏈式調用指定多個規則。比如:

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

這行代碼的UiSelector構建就是采用了如下兩個組合規則:

控件ID"com.android.camera:id/v6_btn_done",這個ID是從某個MIUI版本系統的系統相機獲取的,對應于拍照按鈕;

控件類型為ImageView

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

執行操作

找到了我們需要的控件,接下來該對控件進行操作了!

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

click():點擊控件中心;

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

setText():對可輸入控件設置文本;

swipeUp():對控件執行上滑操作。類似地,swipeDown(), swipeLeft()swipeRight()可以執行相應的操作

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

檢查結果

執行一系列操作之后,我們需要對操作的結果進行驗證了!
對于結果的驗證,我們可以使用之前說到的一系列Assert方法了。比如說,我們需要檢測某個控件的文字:

assertEquals(TargetText, mUiObject.getText())

便可以這樣進行執行。

總結

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

附錄

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65624.html

相關文章

  • Android動化測試-入門入門(2)Testing APIs

    摘要:標識一個測試方法。附錄自動化測試從入門到入門自動化測試從入門到入門自動化測試從入門到入門入門自動化測試從入門到入門自動化測試從入門到入門的測試自動化測試從入門到入門會玩的自動化測試從入門到入門 根據該系列文章的第一篇:Hello Testing,大家已經對整個自動化測試運行流程有了一個基本的了解,接下來我們該集中精力關注具體的腳本實現了!在具體實現之前,我們先來了解一下Android提...

    Meathill 評論0 收藏0
  • Android動化測試-入門入門(4)uiautomatorviewer

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

    winterdawn 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<