2015-02-10 17 views
40

Sto provando a verificare l'assenza della vista dell'interfaccia utente. Il selettore vista è la seguente:(non (isDisplayed())) non riesce con NoMatchingViewException

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

Il selettore funziona bene per verificare se è visualizzata la vista, ma dà l'errore sulla verifica se la vista non viene visualizzato. Sto usando questo come segue:

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

Ma ottengo il seguente errore:

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{...}

Questo è strano. Sto verificando l'assenza dell'interfaccia utente e ci si aspetta che questa vista non venga trovata. Allora perché l'Espresso sta commettendo errori? Si prega di suggerire cosa potrebbe andare storto qui.

Grazie, Stupito!

risposta

84

È necessario utilizzare doesNotExist(). Trovato here.

+12

Non funziona per me, ma 'OnView (withId (R.id.myTestId)) di controllo (partite (non (isDisplayed()))); 'ha funzionato. – Sithu

+12

@Sithu-Dipende dall'app. Se la vista che stai cercando è nella gerarchia della vista ma invisibile, devi usare non (isDisplayed). Tuttavia, se la vista non è presente nella gerarchia della vista, è necessario utilizzare doesNotExist(). – user846316

+0

Ho il pulsante nel layout, ma imposta visibilità 'View.GONE' in' onCreate' in base al ruolo dell'utente. Quindi, significa che è nella gerarchia della vista e invisibile? – Sithu

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

Questa è una risposta parzialmente corretta. Questo funzionerà solo se la vista targedet non esiste nel layout (la gerarchia della vista non contiene questa vista). Tuttavia, questa asserzione fallirà se la vista mirata esiste effettivamente nella gerarchia della vista di layout, ma lo stato di visibilità è GONE o INVISIBLE. Il messaggio di errore di asserzione in questo caso indicherà: 'android.support.test.espresso.base.DefaultFailureHandler $ AssertionFailedWithCauseError: la vista è presente nella gerarchia ...' –

+0

Corretta, quindi penso che potresti controllare il messaggio di errore con la vista dettagliata gerarchia. –

7

funzionano anche con il metodo tuoi, ma qualcosa di simile:.

onView(withId(R.id.next)).check(matches(not(isDisplayed()))); 
Problemi correlati