2017-10-10 2 views
0

Ce que je veux faire est de vérifier si un DialogFragment spécifique est visible et que si son visible que je veux exécuter un code comme celui-ci onView(withId(R.id.start_app)).perform(click());Comment puis-je avec Espresso vérifier si un DialogFragment est visible et seulement alors effectuer une action?

En ce moment, je le code que je ne peux pas utiliser dans un si condition. Les deux codes dans cette méthode fonctionnent indépendamment de si le Dialogfragment est visible ou not.`

@Test 
public void testHowDoIBecomeCustomerButtonX() { 
    onView(withId(R.id.cancel_button)) 
      .inRoot(isDialog()) 
      .check(matches(isDisplayed())); 

    onView(withId(R.id.becoming_customer)).perform(click()); 
} 

Répondre

0

Qu'est-ce que vous pouvez faire est envelopper votre condition dans un try-catch où la condition lève une exception si non satisfait et donc de quitter la try bloc.

Il pourrait ressembler à ceci:

try { 
     onView(withId(R.id.cancel_button)).check(matches(isDisplayed())); 
     onView(withId(R.id.becoming_customer)).perform(click()); 
    } catch (NoMatchingViewException e) { 
    } 

Si le premier chèque de la cancel_button échoue la deuxième ligne n'est pas exécutée. Vous devez juste vous assurer que votre première condition évalue correctement. En général, il s'agit d'un bad pattern. Il y a une raison pour laquelle cela n'est pas possible sans utiliser une sorte de hack. Vous devriez éviter les conditions dans vos tests du tout! Il serait préférable d'avoir deux cas de test séparés où, dans un cas de test, la boîte de dialogue apparaît et vous continuez avec vos tests et dans un second, elle n'apparaît pas et vous continuez à partir de là.