Espresso: return boolean if view exists

前端 未结 8 1746
陌清茗
陌清茗 2020-12-09 01:23

I am trying to check to see if a view is displayed with Espresso. Here is some pseudo code to show what I am trying:

if (!Espresso.onView(withId(R.id.someID)         


        
8条回答
  •  甜味超标
    2020-12-09 01:45

    Conditional logic in tests is undesirable. With that in mind, Espresso's API was designed to guide the test author away from it (by being explicit with test actions and assertions).

    Having said that, you can still achieve the above by implementing your own ViewAction and capturing the isDisplayed check (inside the perform method) into an AtomicBoolean.

    Another less elegant option - catch the exception that gets thrown by failed check:

        try {
            onView(withText("my button")).check(matches(isDisplayed()));
            //view is displayed logic
        } catch (NoMatchingViewException e) {
            //view not displayed logic
        }
    

    Kotlin version with an extension function:

        fun ViewInteraction.isDisplayed(): Boolean {
            try {
                check(matches(ViewMatchers.isDisplayed()))
                return true
            } catch (e: NoMatchingViewException) {
                return false
            }
        }
    
        if(onView(withText("my button")).isDisplayed()) {
            //view is displayed logic
        } else {
            //view not displayed logic
        }
    

提交回复
热议问题