Espresso

作者: tackor | 来源:发表于2017-02-15 18:45 被阅读349次

    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>

    相关文章

      网友评论

          本文标题:Espresso

          本文链接:https://www.haomeiwen.com/subject/binqwttx.html