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