matchs(not(isDisplayed())) schlägt mit NoMatchingViewException fehl
Lesezeit: 3 Minuten
Benutzer846316
Ich versuche, das Fehlen der UI-Ansicht zu testen. Die Ansichtsauswahl ist wie folgt:
public static ViewInteraction onMyTestUi() {
return onView(withId(R.id.myTestId));
}
Der Selektor funktioniert einwandfrei, um zu überprüfen, ob die Ansicht angezeigt wird, gibt jedoch einen Fehler beim Überprüfen, ob die Ansicht nicht angezeigt wird. Ich verwende diese wie folgt:
onMyTestUi().check(matches(not(isDisplayed())));
Aber ich bekomme folgenden Fehler:
com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException: Keine Ansichten in der Hierarchie gefunden passend: mit ID: ist Wenn die Zielansicht nicht Teil der Ansichtshierarchie ist, müssen Sie möglicherweise Espresso.onData verwenden Laden Sie es von einem der folgenden AdapterViews:android.widget.ListView{…}
Das ist merkwürdig. Ich überprüfe das Fehlen der Benutzeroberfläche und es wird erwartet, dass diese Ansicht nicht gefunden wird. Warum löst Espresso dann einen Fehler aus? Bitte schlagen Sie vor, was hier schief laufen könnte.
Benutzer846316
Brauchen Sie zu verwenden doesNotExist() stattdessen. Gefunden hier.
Wenn die Ansicht in der Ansichtshierarchie vorhanden ist, sich jedoch in einem unsichtbaren Zustand befindet (Sichtbarkeit auf „UNSICHTBAR“ gesetzt ist), verwenden Sie not(isDisplayed). Wenn die Ansicht jedoch überhaupt nicht in der Ansichtshierarchie vorhanden ist (z. B. Sichtbarkeit auf ‘GONE’ gesetzt), doesNotExist() wird genutzt.
Bei mir funktioniert es nicht, aber onView(withId(R.id.myTestId)).check(matches(not(isDisplayed()))); funktionierte.
– Sithu
21. April 2016 um 5:39 Uhr
@Sithu -Es hängt von der App ab. Wenn die gesuchte Ansicht in der Ansichtshierarchie vorhanden, aber unsichtbar ist, müssen Sie not(isDisplayed) verwenden. Wenn sich die Ansicht jedoch nicht in der Ansichtshierarchie befindet, müssen Sie doesNotExist() verwenden.
– Benutzer846316
21. April 2016 um 11:42 Uhr
Ich habe die Schaltfläche im Layout, aber die Sichtbarkeit eingestellt View.GONE in onCreate nach Benutzerrolle. Bedeutet das also, dass es in der Ansichtshierarchie und unsichtbar ist?
– Sithu
22. April 2016 um 2:31 Uhr
Ja! Danke dafür, hat mein Problem super gelöst und macht meinen Morgen viel besser (bin mit diesem Problem ins Bett gegangen).
– Popel
6. Juni 2018 um 15:23 Uhr
View.GONE funktioniert mit not(isDisplayed(), funktioniert aber nicht mit doesNotExist(). doesNotExist gibt true zurück, wenn die Sichtbarkeit GONE ist. Ich habe es mit Beispiel versucht. In dem Link, den Sie angegeben haben, steht nichts im Zusammenhang mit View.GONE.
– metis
16. Juli 2020 um 16:03 Uhr
Arbeite auch mit deiner Methode, aber ungefähr so:
Dies ist eine teilweise richtige Antwort. Dies funktioniert nur, wenn die Zielansicht nicht im Layout vorhanden ist (die Ansichtshierarchie enthält diese Ansicht nicht). Diese Assertion schlägt jedoch fehl, wenn die Zielansicht tatsächlich in der Layout-Ansichtshierarchie vorhanden ist, ihr Sichtbarkeitsstatus jedoch GONE oder INVISIBLE ist. Die Assertionsfehlermeldung lautet in diesem Fall: android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: View is present in the hierarchy...
– Simon-Droid
29. Dezember 2016 um 15:46 Uhr
Richtig, also denke ich, dass Sie die Fehlermeldung mit der Detailansichtshierarchie überprüfen könnten.
– Olivia Liao
29. Dezember 2016 um 19:54 Uhr
Pabel
Sie können diese Option ausprobieren, wenn Sie die Sichtbarkeit der Ansicht “withEffectiveVisibility” aktivieren.
Wenn Sie überprüfen möchten, ob View entweder nicht sichtbar oder ist nicht vorhanden.
public static ViewAssertion isNotDisplayed() {
return new ViewAssertion() {
@Override
public void check(View view, NoMatchingViewException noView) {
if (view != null && isDisplayed().matches(view)) {
throw new AssertionError("View is present in the hierarchy and Displayed: "
+ HumanReadables.describe(view));
}
}
};
}
Vielen Dank dafür – IMHO ist dies die beste Lösung für eine allgemeine “Prüfung, ob die Ansicht vom Bildschirm verschwunden ist”. Eine Korrektur jedoch: IME, die Verwendung ist onView(withId(R.id.someView)).check(isNotDisplayed());
– Sterling
5. Juni 2018 um 23:35 Uhr
Vielen Dank dafür – IMHO ist dies die beste Lösung für eine allgemeine “Prüfung, ob die Ansicht vom Bildschirm verschwunden ist”. Eine Korrektur jedoch: IME, die Verwendung ist onView(withId(R.id.someView)).check(isNotDisplayed());
– Sterling
5. Juni 2018 um 23:35 Uhr
14391200cookie-checkmatchs(not(isDisplayed())) schlägt mit NoMatchingViewException fehlyes