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