Espresso cliquez sur l'élément de menu
J'ai un menu dans l'actionbar que je crée par:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, 98,Menu.NONE,R.string.filter).setIcon(R.drawable.ic_filter_list_white_48dp).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add(Menu.NONE, 99,Menu.NONE,R.string.add).setIcon(R.drawable.ic_add_white_48dp).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
et menu_main.xml ressemble:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="never"
android:icon="@drawable/ic_settings_white_48dp"/>
</menu>
Lors de l'essai de l'Espresso, je voudrais cliquer sur le "icône" ajouter " (menuId 99). J'ai essayé
@Test
public void testAdd() {
openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext());
onView(withText(R.string.add)).perform(click());
}
mais cela ne fonctionne pas avec une NoMatchingViewException. ( Les paramètres de l'élément, qui est défini dans le fichier xml directement je peux cliquer avec le même code. )
C'est pour targetSdkVersion 23 et AppCompatActivity. Les lignes de la barre d'outils sont les suivants:
Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
if( getSupportActionBar() != null ) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
et tool_bar.xml ressemble:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:background="@color/ColorPrimary"
android:elevation="4dp"
tools:ignore="UnusedAttribute">
</android.support.v7.widget.Toolbar>
Ce
targetSdkVersion 23 et AppCompatActivity. J'ai ajouté le code barre d'outils ci-dessus.
Pourrait-il y avoir un problème lors de l'appariement le texte avec "withText(R. string.ajouter)", comme le texte n'est pas visible, mais uniquement l'icône (R. drawable.ic_add_white_48dp) est-elle visible?
C'est sur un Sony Xperia SP (périphérique réel, pas d'émulateur).
Pas une solution, mais j'ai remarqué que "onView(withId(99)).effectuer(cliquez sur());" travaille, même si je me souviens avoir lu quelque part que ces "menu " Id" ne sont pas la même chose que la "view-id"....
targetSdkVersion
, ActionBar et de l'appareil/émulateur utilisez-vous?. Voir la openActionBarOverflowOrOptionsMenu() mise en œuvre (à Expresso), dépend de ces facteurs. J'ai besoin d'enquêter sur elle, mais il ya quelque chose de mal, il n'y en fonction de l'émulateur que j'utilise.targetSdkVersion 23 et AppCompatActivity. J'ai ajouté le code barre d'outils ci-dessus.
Pourrait-il y avoir un problème lors de l'appariement le texte avec "withText(R. string.ajouter)", comme le texte n'est pas visible, mais uniquement l'icône (R. drawable.ic_add_white_48dp) est-elle visible?
C'est sur un Sony Xperia SP (périphérique réel, pas d'émulateur).
Pas une solution, mais j'ai remarqué que "onView(withId(99)).effectuer(cliquez sur());" travaille, même si je me souviens avoir lu quelque part que ces "menu " Id" ne sont pas la même chose que la "view-id"....
OriginalL'auteur user1583209 | 2015-11-27
Vous devez vous connecter pour publier un commentaire.
Mise à jour: je n'ai pas vu le final de la ligne, ignorer mes précédentes réponses, j'ai essayé de le réparer rapidement et j'ai fait de mal. Je ne savais vraiment pas la réponse.
Votre question est expliqué ici par l'Espresso équipe:
Donc, je comprends que les deux variantes sont corrects, mais tout dépend de votre cas spécifique. Si vous testez un bouton, normalement, vous savez si elle est visible ou pas à ce moment-là.
Dans votre cas, le bouton est visible car il ya de la place, et c'est correct d'utiliser
withId
comme ici:Mais cette c'est correct aussi pour le débordement éléments:
Maintenant, ma question est de savoir quoi faire lorsque vous testez sur différents appareils et vous ne savez pas quand aura de la place pour un élément. Je ne connais pas la réponse, peut-être combiner les deux solutions.
Je ne sais pas, attendre une meilleure réponse, j'ai répondu parce que je pensais que c'était la même question que j'ai commenté. Je vais le mettre à jour si personne n'a de réponse et j'ai trouver une meilleure réponse. Je n'ai jamais utilisé SHOW_AS_ACTION_IF_ROOM et je suis encore à apprendre à Espresso.
OriginalL'auteur albodelu
Vous pouvez utiliser cette méthode pour cliquez sur l'élément de menu. Cliquez d'abord sur le bouton de menu à l'aide de ce code
Effectuez ensuite cliquez sur l'élément de menu basé sur le texte.Remplacer votre point de menu nom de "MenuItemName"
OriginalL'auteur Ishan Fernando
était la seule option qui a fonctionné pour mon Samsung Note 3. Cette
openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());
voudrais essayer et échouer sans aucune erreurOriginalL'auteur gorbysbm
Utilisation de ce match sur le texte de la description de l'élément de menu:
Alors vous n'avez pas de match sur la (non-existant) ID, ni sur le drawable icône.
Aussi, n'oubliez pas d'utiliser ce bout de code à partir de l'Expresso de la documentation si vous devez assurez-vous que le menu est élargi:
OriginalL'auteur Eirik W
La barre d'outils n'est pas l'actionBar, pas besoin de l'appeler :
Et si vous le faites, assurez-vous que votre article ne sera pas s'y trouve (ce n'est pas dans l'ActionBar) et la Barre d'outils appartient à la "normal".
OriginalL'auteur Mathias Seguy Android2ee
C'est ma solution qui couvre l'ensemble des trois situations: matériel bouton menu, menu de dépassement, seules les icônes:
OriginalL'auteur guni
Ne souffre pas beaucoup. Nous allons Faire simple.
Cela vous aidera à effectuer, cliquez sur Ajouter
Avec Texte ne conviendra pas à ce scénario, car Espresso fondamentalement trouver le texte qui a été montré à l'Écran. Cependant, nous à l'aide de l'Icône qui n'ont pas de texte. Nous ne pouvons pas effectuer d'action avec du Texte().
OriginalL'auteur Manish