Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Espresso, No views in hierarchy found matching

I'm testing the launch of a fragment inside my activity, so after performing a click on button that going to launch the fragment, I tested the existing of a text on view inside the launched fragment, but the test fail even though that fragment is launched on my phone, and even in the View Hierarchy is showing that the text exist :

View Hierarchy:

+--------->AppCompatTextView{id=2131886318, res-name=text3_textView, visibility=VISIBLE, width=768, height=68, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=695.0, text=Pour finaliser votre inscription nous avons besion
d'une photo de profil, input-type=0, ime-target=false, has-links=false}

The test fail here :

onView(withText("photo de profil")).check(matches(isDisplayed()));

I'm wondering why espresso fail this test, is it because it doesn't wait for the launch of the fragment?

Btw I turned animations off.

like image 506
Abdennacer Lachiheb Avatar asked Jan 21 '17 13:01

Abdennacer Lachiheb


2 Answers

What I was doing:

    @Rule
    @JvmField
    var mActivityTestRule = ActivityTestRule(SplashScreenActivity::class.java)

Due to this rule, the Espresso Library was searching for the login EditText view on the SplashScreenActivity. The sad part was, this login EditText view was actually present in the LoginActivity as a result the test cases failed with the above-mentioned error.

What I did to make everything work:

    @Rule
    @JvmField
    var mActivityTestRule = ActivityTestRule(LoginActivity::class.java)

As soon as I changed the Activity from SplashScreenActivity to LoginActivity in the above rule. Espresso easily found this login EditText view and all the tests passed.

Just make sure you are pointing Espresso to the correct Activity/Fragment where the View is actually present.

like image 79
iCantC Avatar answered Nov 15 '22 06:11

iCantC


The espresso withText method match that all the string is equal.

In your case you need to match if the string ends with your string.

Your code should be this:

onView(withText(endsWith("photo de profil"))).check(matches(isDisplayed()));

Here you have more examples: http://qathread.blogspot.com.br/2014/01/discovering-espresso-for-android.html

like image 13
jonathanrz Avatar answered Nov 15 '22 07:11

jonathanrz