2017-05-07 2 views
0

je l'élément de menu suivant que je veux cliquer à l'aide Espresso:Espresso - Cliquez sur l'article de menu avec application: showAsAction = « ifRoom »

<item 
    android:id="@+id/action_save" 
    android:icon="@drawable/vector_image_save" 
    android:orderInCategory="4" 
    android:title="@string/menu_action_save" 
    app:showAsAction="ifRoom"/> 

En raison de ifRoom, dans certains dispositifs, le menu est affiché comme icône dans la barre d'action tandis que dans les plus petits appareils, il est montré sous le "plus d'options".

je pouvais utiliser le code ci-dessous pour taper sur l'icône Enregistrer dans la barre d'action: onView(withId(R.id.action_save)).perform(click());

Et je pouvais utiliser le code ci-dessous pour taper sur Enregistrer si elle est présente sous les « plus d'options »: openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext()); onView(withText(R.string.menu_action_save)).perform(click());

Je veux une méthode de test unique qui fonctionnerait dans les deux cas.

Répondre

1
try { 
     onView(withId(R.id.action_save)).perform(click()); 
    } catch (NoMatchingViewException e) { 
     openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext()); 
     onView(withText(R.string.menu_action_save)).perform(click()); 
    } 

Vous allez d'abord vérifier si le menu est présent sous forme d'icône. Si oui, cliquez dessus. Sinon, ouvrez le menu "Plus d'options", puis sélectionnez le menu "Enregistrer" dans le menu contextuel.

Note: Je sais que nous ne devrions pas utiliser les conditions dans les méthodes de test, mais je n'ai pas trouvé d'autre solution. Si l'un d'entre vous trouve une meilleure solution, veuillez l'afficher ici.

+0

FYI Il existe une solution élégante dans la réponse suivante https://stackoverflow.com/a/40864574/340175 – JulianHarty