- Espresso 測試框架教程
- Espresso 測試 - 首頁
- 簡介
- 設定說明
- 在 Android Studio 中執行測試
- JUnit 概述
- 架構
- 檢視匹配器
- 自定義檢視匹配器
- 檢視斷言
- 檢視操作
- 測試 AdapterView
- 測試 WebView
- 測試非同步操作
- 測試 Intent
- 測試多個應用程式的 UI
- 測試錄製器
- 測試 UI 效能
- 測試可訪問性
- Espresso 測試資源
- Espresso 測試 - 快速指南
- Espresso 測試 - 有用資源
- Espresso 測試 - 討論
Espresso 測試框架 - 檢視操作
如前所述,檢視操作自動化了 Android 應用程式中使用者可以執行的所有可能操作。Espresso 的 onView 和 “onData” 提供了 perform 方法,該方法接受檢視操作並呼叫/自動化測試環境中的相應使用者操作。例如,“click()” 是一個檢視操作,當傳遞給 onView(R.id.myButton).perform(click()) 方法時,將在測試環境中觸發按鈕(id:“myButton”)的點選事件。
在本章中,讓我們瞭解 Espresso 測試框架提供的檢視操作。
typeText()
typeText() 接受一個型別為 String 的引數(文字)並返回一個檢視操作。返回的檢視操作將提供的文字輸入到檢視中。在放置文字之前,它會點選檢視一次。如果內容已包含文字,則內容可能會放置在任意位置。
onView(withId(R.id.text_view)).perform(typeText("Hello World!"))
typeTextIntoFocusedView()
typeTextIntoFocusedView() 與 typeText() 類似,但它將文字放置在檢視中游標位置的右側。
onView(withId(R.id.text_view)).perform(typeTextIntoFocusedView("Hello World!"))
replaceText()
replaceText() 與 typeText() 類似,但它會替換檢視的內容。
onView(withId(R.id.text_view)).perform(typeTextIntoFocusedView("Hello World!"))
clearText()
clearText() 沒有引數,並返回一個檢視操作,該操作將清除檢視中的文字。
onView(withId(R.id.text_view)).perform(clearText())
pressKey()
pressKey() 接受鍵碼(例如 KeyEvent.KEYCODE_ENTER)並返回一個檢視操作,該操作將按下對應於鍵碼的鍵。
onView(withId(R.id.text_view)).perform(typeText( "Hello World!", pressKey(KeyEvent.KEYCODE_ENTER))
pressMenuKey()
pressMenuKey() 沒有引數,並返回一個檢視操作,該操作將按下硬體選單鍵。
onView(withId(R.id.text_view)).perform(typeText( "Hello World!", pressKey(KeyEvent.KEYCODE_ENTER), pressMenuKey())
closeSoftKeyboard()
closeSoftKeyboard() 沒有引數,並返回一個檢視操作,該操作將關閉鍵盤(如果已開啟)。
onView(withId(R.id.text_view)).perform(typeText( "Hello World!", closeSoftKeyboard())
click()
click() 沒有引數,並返回一個檢視操作,該操作將呼叫檢視的點選操作。
onView(withId(R.id.button)).perform(click())
doubleClick()
doubleClick() 沒有引數,並返回一個檢視操作,該操作將呼叫檢視的雙擊操作。
onView(withId(R.id.button)).perform(doubleClick())
longClick()
longClick() 沒有引數,並返回一個檢視操作,該操作將呼叫檢視的長按操作。
onView(withId(R.id.button)).perform(longClick())
pressBack()
pressBack() 沒有引數,並返回一個檢視操作,該操作將點選後退按鈕。
onView(withId(R.id.button)).perform(pressBack())
pressBackUnconditionally()
pressBackUnconditionally() 沒有引數,並返回一個檢視操作,該操作將點選後退按鈕,如果後退按鈕操作退出應用程式本身,則不會丟擲異常。
onView(withId(R.id.button)).perform(pressBack())
openLink()
openLink() 有兩個引數。第一個引數(連結文字)型別為 Matcher,並引用 HTML 錨標記的文字。第二個引數(url)型別為 Matcher,並引用 HTML 錨標記的 url。僅適用於 TextView。它返回一個檢視操作,該操作收集文字檢視內容中所有可用的 HTML 錨標記,找到與第一個引數(連結文字)和第二個引數(url)匹配的錨標記,最後開啟相應的 url。讓我們考慮一個文字檢視,其內容如下:
<a href="http://www.google.com/">copyright</a>
然後,可以使用以下測試用例開啟和測試連結:
onView(withId(R.id.text_view)).perform(openLink(is("copyright"),
is(Uri.parse("http://www.google.com/"))))
在這裡,openLink 將獲取文字檢視的內容,找到文字為版權,www.google.com 為 url 的連結,並在瀏覽器中開啟 url。
openLinkWithText()
openLinkWithText() 具有一個引數,該引數可以是 **String* 或 Matcher 型別。它只是 openLink *方法的快捷方式。
onView(withId(R.id.text_view)).perform(openLinkWithText("copyright"))
openLinkWithUri()
openLinkWithUri() 具有一個引數,該引數可以是 String 或 Matcher 型別。它只是 openLink* 方法的快捷方式。
onView(withId(R.id.text_view)).perform(openLinkWithUri("http://www.google.com/"))
pressImeActionButton()
pressImeActionButton() 沒有引數,並返回一個檢視操作,該操作將執行在 android:imeOptions 配置中設定的操作。例如,如果 android:imeOptions 等於 actionNext,這將把游標移動到螢幕上下一個可能的 EditText 檢視。
onView(withId(R.id.text_view)).perform(pressImeActionButton())
scrollTo()
scrollTo() 沒有引數,並返回一個檢視操作,該操作將滾動螢幕上匹配的 scrollView。
onView(withId(R.id.scrollView)).perform(scrollTo())
swipeDown()
swipeDown() 沒有引數,並返回一個檢視操作,該操作將在螢幕上觸發向下滑動操作。
onView(withId(R.id.root)).perform(swipeDown())
swipeUp()
swipeUp() 沒有引數,並返回一個檢視操作,該操作將在螢幕上觸發向上滑動操作。
onView(withId(R.id.root)).perform(swipeUp())
swipeRight()
swipeRight() 沒有引數,並返回一個檢視操作,該操作將在螢幕上觸發向右滑動操作。
onView(withId(R.id.root)).perform(swipeRight())
swipeLeft()
swipeLeft() 沒有引數,並返回一個檢視操作,該操作將在螢幕上觸發向左滑動操作。
onView(withId(R.id.root)).perform(swipeLeft())