Espresso
Espresso
Espresso提供大量的方法用来进行UI测试,这些API可以让你写的简洁和可靠的自动化UI测试,站在用户的角度测试,所有逻辑是黑盒
Espresso的三个重要功能:
- 元素定位
- 操作元素
- 验证结果
使用流程:
onView(ViewMatcher) // 定位元素
.perform(ViewAction) // 操作元素
.check(ViewAssertion); // 验证结果
<br />
补充:
-
Espresso 常用方法:
closeSoftKeyboard() onData(Matcher<? extends Object> dataMatcher) onView(Matcher<View> viewMatcher) pressBack() registerIdlingResources(IdlingResource... resources)
Espresso API : <a href='https://developer.android.com/reference/android/support/test/espresso/Espresso.html'>https://developer.android.com/reference/android/support/test/espresso/Espresso.html</a>
-
ViewInteraction 常用方法:
check(ViewAssertion viewAssert) // 检测当前view是否匹配ViewAssertion perform(ViewAction... viewActions) // 让当前view执行方法参数中的ViewAction withFailureHandler(FailureHandler failureHandler)
ViewInteraction API : <a href='https://developer.android.com/reference/android/support/test/espresso/ViewInteraction.html'>https://developer.android.com/reference/android/support/test/espresso/ViewInteraction.html</a>
--
<br />
1. 元素定位 onView(ViewMatchers) --> ViewInteraction
public static ViewInteraction onView(final Matcher<View> viewMatcher) {}
Espresso.onView
方法接收一个Matcher<View>
类型的入参,并返回一个ViewInteraction
对象。
ViewMatchers
对象提供了大量的withXXX
方法用来定位元素,常用的有:
withId(int id) // 根据元素Id属性
withText(String text) // 根据元素的text属性
withText(int resourceId) // 根据元素的文本id
withHint(int resourceId) // 根据元素的预置内容属性
withHint(String hintText) // 根据元素的预置内容属性 withResourceName(String name) // 根据资源文件名
withResourceName(Matcher<String> stringMatcher) // 根据资源文件id号
withChildwithParent(Matcher<View> parentMatcher)
withClassName(Matcher<String> classNameMatcher)
withContDescriptiion(int resourceId) // 根据元素的描述(description )属性
withContDescriptiion(String text) // 根据元素的描述(description )属性
以及一系列的isXXX
方法用来判断元素的状态, 常用的有:
isDisplayed() //元素处于可见状态
isChecked() //元素(checkbox)处于选中状态
isNotChecked() //元素(checkbox)处于未被选择状态
isEnabled()
isFocusable() //元素是否处于聚焦属性
isSelected() //元素处于被选择状态
其他常用
hasFocus() //获取拥有焦距的元素
如果单一的匹配条件无法精确地匹配出来唯一的控件,我们可能还需要额外的匹配条件,此时可以用AllOf#allOf()
方法来进行复合匹配条件的构造, 用法如下:
onView(allOf(withId(id), withText(text)))
ViewMatchers API :<a href='https://developer.android.com/reference/android/support/test/espresso/matcher/ViewMatchers.html'>https://developer.android.com/reference/android/support/test/espresso/matcher/ViewMatchers.html</a>
2. 操作元素 perform(ViewAction...) --> ViewInteraction
public ViewInteraction perform(final ViewAction... viewActions) {}
当定位到元素后,返回一个ViewInteraction
对象,其perform
方法可以接收一系列ViewAction
用来进行模拟用户操作,
ViewActions
类提供了大量的操作实现,常用的有:
clearText() // 清楚文本
typeText(String str) // 输入文本 str
typeTextIntoFocusedView(String str) // 在聚焦的元素中输入文本str
closeSoftKeyboard() // 关闭软键盘
click() // 点击
doubleClick() // 双击
longClick() // 长按
pressBack() // 点击物理键返回
pressKey(int keyCode) // 点击指定的某个按键
pressKey(EspressoKey key) // 点击指定的某个按键
swipeLeft() // 向左轻扫
swipeRight() // 向右轻扫
swipeUp() // 向上轻扫
swipeDown() // 向下轻扫
scrollTo() // 滑动到当前元素
ViewActions API :<a href='https://developer.android.com/reference/android/support/test/espresso/action/ViewActions.html'>https://developer.android.com/reference/android/support/test/espresso/action/ViewActions.html</a>
3. 验证结果 check(ViewAssertion) -> ViewInteraction
public ViewInteraction check(final ViewAssertion viewAssert) {}
最后为了验证操作是否符合预期,我们还是需要定位到元素,获得一个ViewInteraction
对象,其check
方法接收了一个ViewAssertion
的入参,该入参的作用就是检查结果是否符合我们的预期。
ViewAssertion
中常见方法
doesNotExist() // 元素不存在
matches(Matcher<? super View> viewMatcher) // 根据Matcher得到想要的元素
selectedDescendantsMatch(Matcher<View> selector, Matcher<View> matcher) //
ViewAssertion API :<a href='https://developer.android.com/reference/android/support/test/espresso/assertion/ViewAssertions.html'>https://developer.android.com/reference/android/support/test/espresso/assertion/ViewAssertions.html</a>