以前的文章中,咱們介紹了Android自動化測試的一些背景,以及Espresso
的基本應用。除了以前介紹過的Espresso
的相關用法,Espresso
還提供了一些其餘的用法,可讓咱們在不一樣場景下靈活使用。這篇文章咱們依然關注於Espresso
提供的功能。html
有些時候,一個佈局中可能包含不少重複的控件。這些控件可能擁有相同的ID
以及相同的text
,不容易經過簡單的匹配規則進行匹配。很典型的一個例子是ListView
,比方在咱們的通信錄列表中每一項都有一個打電話的按鈕,這些按鈕有一樣的ID
,而且顯示一樣的文字,這樣一來咱們很難經過onView()
進行匹配。android
除了經過上一篇文章AdapterView的測試介紹的onData()
方法之外,Espresso
還提供了一個hasSibling()
方法,用來經過目標控件的Sibling
進行匹配。git
官網提供了這麼一個例子:咱們有一個以下圖所示的列表,github
這個列表的每一項都有一個顯示「7」
的TextView
,這些TextView
的text
屬性是相同的,可是在View
層級中,每個TextView
左邊都對應有一個彼此不一樣的TextView
。比方說咱們要找的第一個「7」
左邊顯示了「item: 0」
,此時能夠經過以下的代碼匹配目標控件:web
onView(allOf(withText("7"), hasSibling(withText("item: 0")))) .perform(click());
有時候咱們須要對一個View
中的某個子控件進行操做(好比點擊一個ListView
條目中的某個指定Button
),這時咱們能夠經過onChildView()
方法指定相應的子控件。segmentfault
咱們來看以下一個例子。工具
在這個列表中,對於每一個列表項,左邊顯示了一個字符串,右邊顯示了該字符串的長度。咱們如今想要點擊「item: 50」
這一行右邊的TextView
。咱們已經經過onData()
匹配出了該行View
:佈局
onData(withItemContent("item: 60"))
其中withItemContent()
提供了一個自定義Matcher
。關於自定義Matcher
的介紹能夠參考以前的AdapterView的測試中的相關介紹。測試
此時,咱們能夠再經過onChildView()
方法找到相應的子控件:gradle
onData(withItemContent("item: 60")) .onChildView(withId(R.id.item_size)) .perform(click());
Espresso
還支持對WebView
的測試,若是須要對Web
進行測試,須要在buid.gradle
中添加以下依賴:
androidTestCompile 'com.android.support.test.espresso:espresso-web:2.2.1'
請注意,目前Espresso-Web
只支持Espresso 2.2+
以及testing support library 0.3+
版本。
Espresso-Web
對Web
的測試思路與對原生APP的測試思路大致相同,也是首先匹配出咱們須要的目標元素,而後執行一系列操做,再經過Assertions
進行結果的檢查。所以在這裏簡單說明一下Espresso-Web
提供的一系列方法,你們能夠自行查看官方文檔或者源碼瞭解細節。
withElement(ElementReference)
方法提供了尋找目標元素的功能,實例代碼以下:
onWebView().withElement(findElement(Locator.ID, "teacher"))
perform(Atom)
方法會對目標元素進行一系列操做:
onWebView().withElement(findElement(Locator.ID, "teacher")) .perform(webClick());
check(WebAssertion)
方法會對目標元素進行檢查:
onWebView() .withElement(findElement(Locator.ID, "teacher")) .withContextualElement(findElement(Locator.ID, "person_name")) .check(webMatches(getText(), containsString("Socrates")));
本篇文章做爲以前文章對Espresso
介紹的補充,比較簡單,整體上也是根據官方提供的文檔選取了我認爲比較好玩的幾個小話題,除了這些之外官方文檔中還提供了其餘一些細節的說明,在此附上Espresso
官方文檔的地址,你們能夠自行查閱:
到此爲止,咱們的系列文章已經完成了對Espresso
的介紹。實際上你們看完官方文檔以後,也會發現其實內容不多,基本上也就是我介紹過的這些東西,具體怎麼使用仍是須要結合咱們的實際業務場景靈活進行選擇。
接下來的文章中,咱們會相繼介紹Android
自動化測試的一些其餘相關工具和話題。
Android自動化測試-從入門到入門(1) Hello Testing!
Android自動化測試-從入門到入門(2) Testing APIs
Android自動化測試-從入門到入門(3) Espresso入門
Android自動化測試-從入門到入門(4) uiautomatorviewer
Android自動化測試-從入門到入門(5) AdapterView的測試
Android自動化測試-從入門到入門(6) 會玩的Espresso
Android自動化測試-從入門到入門(7) UI Automator