2017-03-27 2 views
1

Je cette simple interaction Espresso:Obtenir NoMatchingViewException pendant Perform (...), mais pas le contrôle précédent (...)

onView(atIndex(withId(R.id.editTextTextWidget), 0)).inRoot(authViewRootMatcher) 
       .check(matches(allOf(isDisplayed(), isEnabled()))) 
       .perform(typeText("1")); 

Les check(matches(allOf(isDisplayed(), isEnabled()))) passe comme prévu, mais le perform(typeText("1")) suivant ne fonctionne pas. Je ne peux pas comprendre pourquoi, pour la vie de moi.

Donc, je ne peux pas croire que je vous pose cette question, mais comment au nom d'Android dois-je utiliser Espresso pour saisir du texte dans mon EditText dont l'ID est R.id.editTextTextWidget?

+0

Pourquoi 'inRoot()'? Est-ce dans "Dialog"? – azizbekian

+0

@azizbekian Le 'EditText' est dans un' View' flottant qui est montré par 'WindowManager.addView (...)'. 'authViewRootMatcher' correspond correctement à la racine attendue. – oaskamay

+0

Pourquoi êtes-vous sûr que 'check()' correspond exactement au 'EditText' que vous prévoyez de faire correspondre? parce que je vois que vous en avez plusieurs (atIndex (.., 0)). – azizbekian

Répondre

0

je résolu le problème en divisant l'appel check(...) et perform(...) appel:

onView(atIndex(withId(R.id.editTextTextWidget), 0)).inRoot(authViewRootMatcher) 
     .check(matches(allOf(isDisplayed(), isEnabled()))); 
onView(atIndex(withId(R.id.editTextTextWidget), 0)).inRoot(authViewRootMatcher) 
     .perform(typeText("1")); 

Pour une raison quelconque cela fonctionne, et l'original ne fonctionne pas. #GooglePlz