Espresso

2017-02-15  本文已影响349人  tackor

Espresso

Espresso提供大量的方法用来进行UI测试,这些API可以让你写的简洁和可靠的自动化UI测试,站在用户的角度测试,所有逻辑是黑盒


Espresso的三个重要功能:

使用流程:

onView(ViewMatcher)        // 定位元素
  .perform(ViewAction)     // 操作元素
  .check(ViewAssertion);   // 验证结果

<br />

补充:

  1. 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>

  2. 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>

上一篇下一篇

猜你喜欢

热点阅读