unit test support studio para book androidtestimplementation android-espresso

android espresso - test - coincide(not(isDisplayed())) falla con NoMatchingViewException



robotium (5)

Estoy tratando de probar la ausencia de la vista de la interfaz de usuario. El selector de vista es el siguiente:

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

El selector funciona bien para verificar si se muestra la vista, pero da error al verificar si la vista no se muestra. Estoy usando esto de la siguiente manera:

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

Pero me sale el siguiente error:

com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException: No se encontraron coincidencias en la jerarquía: con id: is Si la vista de destino no forma parte de la jerarquía de vistas, es posible que deba usar Espresso.onData para cárguelo desde uno de los siguientes AdapterViews: android.widget.ListView {...}

Esto es extraño. Estoy comprobando la ausencia de la interfaz de usuario y se espera que esta vista no se encuentre. Entonces, ¿por qué Espresso está arrojando un error? Por favor, sugiera lo que podría estar yendo mal aquí.

Gracias, asombrado!


Necesita usar doesNotExist() lugar. Encontrado here


Puede probar esta opción si marca la visibilidad de la vista "con Visibilidad Efectiva"

onViewWithId(R.id.YOURVIEW).check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))


Si desea verificar si View no es visible o no existe .

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)); } } }; }

Uso:

onView(withId(R.id.someView)).check(isNotDisplayed());


También trabaje con el método suyo, pero algo como esto:

onView(withText("")).check(doesNotExist());


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