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