Espresso-klicken Sie auf Menü
Ich habe ein Menü in der actionbar, die ich erstellen durch:
@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;
}
und menu_main.xml sieht aus wie:
<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>
Beim testen im Espresso würde ich gerne klicken Sie auf die "hinzufügen" - Symbol (menuId 99). Ich habe versucht,
@Test
public void testAdd() {
openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext());
onView(withText(R.string.add)).perform(click());
}
aber dieser schlägt mit einem NoMatchingViewException. ( Die Einstellungen posten, das ist definiert in der xml direkt ich kann Sie mit dem gleichen code. )
Dass für targetSdkVersion 23 und AppCompatActivity. Die relevanten Zeilen für die tool-bar sind:
Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
if( getSupportActionBar() != null ) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
und tool_bar.xml sieht aus wie:
<?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>
InformationsquelleAutor der Frage user1583209 | 2015-11-27
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update: ich nicht sehen, der Letzte der Linie, ignorieren Sie meine vorherigen Antworten, ich habe versucht, es zu beheben und schnell ich falsch gemacht habe. Ich wusste wirklich nicht, die Antwort.
Ihre Frage erklärt hier durch das Espresso-team:
So verstehe ich, dass beide Varianten richtig sind, aber abhängig von Ihrem speziellen Fall. Wenn Sie testen eine Taste, die Sie normalerweise wissen, ob es sichtbar ist oder nicht, in diesem moment.
In Ihrem Fall die Schaltfläche sichtbar ist, weil es Raum, und es richtig zu verwenden
withId
wie hier:Aber diese es richtig zu overflow-Elemente:
Nun ist meine Frage, was zu tun ist, wenn Sie testen auf verschiedenen Geräten und Sie wissen nicht, Wann wird Raum sein für ein Element. Ich weiß nicht, die Antwort, vielleicht kombinieren Sie die beiden Lösungen.
InformationsquelleAutor der Antwort albodelu
Können Sie diese Methode verwenden, klicken Sie auf Menü. Zuerst klicken Sie auf Menü-Taste mit diesem code
Dann durchzuführen, klicken Sie auf Menü basierend auf dem text.Ersetzen Sie das Menüelement Namen mit "MenuItemName"
InformationsquelleAutor der Antwort Ishan Fernando
war die einzige option, die gearbeitet für mein Samsung Note 3. Diese
openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());
würde versuchen und scheitern, ohne FehlerInformationsquelleAutor der Antwort gorbysbm
Verwenden Sie diese zu entsprechen, auf die Beschreibung für den Menüpunkt:
Dann müssen Sie nicht haben, um entsprechen die (nicht vorhandene) ID, noch in den drawable-Symbol.
Auch, vergessen Sie das code-snippet aus der Espresso-Dokumentation wenn Sie brauchen, um stellen Sie sicher, das Menü ist erweitert:
InformationsquelleAutor der Antwort Eirik W
Ist die Symbolleiste nicht die actionBar, keine Notwendigkeit der Anruf :
Und wenn Sie es tun, das ist sicher, dass das Element nicht gefunden werden (es ist nicht in der ActionBar) und die Symbolleiste gehört zur "normalen Ansicht".
InformationsquelleAutor der Antwort Mathias Seguy Android2ee
Dies ist meine Lösung, die für alle drei Situationen: hardware-Menü-Taste, überlauf-Menü nur Symbole:
InformationsquelleAutor der Antwort guni
Nicht viel leiden. Lassen Sie uns Machen Sie es sich einfach.
Diese durchführen, wird Ihnen helfen klicken Sie auf Hinzufügen
InformationsquelleAutor der Antwort Manish