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 为网址,并在浏览器中打开该网址。

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())