2015-02-10 10 views
40

Próbuję przetestować brak widoku interfejsu użytkownika. Selektor pogląd jest następujący:mecze (not (isDisplayed())) kończy się niepowodzeniem z NoMatchingViewException

public static ViewInteraction onMyTestUi() { 
    return onView(withId(R.id.myTestId)); 
} 

selektor działa dobrze, aby sprawdzić, czy wyświetlany jest widok, ale daje błąd na sprawdzenie, czy widok nie jest wyświetlany. Używam to w następujący sposób:

onMyTestUi().check(matches(not(isDisplayed()))); 

Ale pojawia się następujący błąd:

com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: is If the target view is not part of the view hierarchy, you may need to use Espresso.onData to load it from one of the following AdapterViews:android.widget.ListView{...}

To jest dziwne. Sprawdzam brak interfejsu użytkownika i oczekiwano, że ten widok nie zostanie znaleziony. Więc dlaczego Espresso rzuca błąd? Proszę zasugerować, co może być nie tak.

Dzięki, Zdziwiony!

Odpowiedz

84

Zamiast tego należy użyć doesNotExist(). Znaleziono here.

+12

To nie działa na mnie, ale 'OnView (withId (R.id.myTestId)) zwrotny (mecze (not (isDisplayed())); 'działało. – Sithu

+12

@Sithu - zależy od aplikacji. Jeśli widok, którego szukasz, znajduje się w hierarchii widoku, ale niewidoczny, musisz go użyć (nie jest wyświetlany). Jeśli jednak widoku nie ma w hierarchii widoku, należy użyć metody doesNotExist(). – user846316

+0

Mam przycisk w układzie, ale ustawić widoczność 'View.GONE' w' onCreate' na rolę użytkownika. Czy oznacza to, że znajduje się w hierarchii widoku i jest niewidoczny? – Sithu

5
onView(withText("")).check(doesNotExist()); 
+1

To jest częściowo poprawna odpowiedź. To zadziała tylko wtedy, gdy widok tardety nie istnieje w układzie (hierarchia widoku nie zawiera tego widoku). Jednak to stwierdzenie nie powiedzie się, jeśli widok docelowy rzeczywiście istnieje w hierarchii widoku układu, ale jego stan widoczności jest GONE lub INVISIBLE. Komunikat o błędzie assertion w tym przypadku będzie określał: 'android.support.test.espresso.base.DefaultFailureHandler $ AssertionFailedWithCauseError: Widok jest obecny w hierarchii ...' –

+0

Prawidłowo, więc myślę, że możesz sprawdzić komunikat o błędzie z widokiem szczegółowym hierarchia. –

7

pracować także metodą Ciebie, ale coś takiego:.

onView(withId(R.id.next)).check(matches(not(isDisplayed()))); 
Powiązane problemy