usuario846316
Estoy tratando de probar la ausencia de la vista de la interfaz de usuario. El selector de vistas es el siguiente:
public static ViewInteraction onMyTestUi() {
return onView(withId(R.id.myTestId));
}
El selector funciona bien para comprobar si se muestra la vista, pero da error al comprobar si no se muestra la vista. 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 vistas en la jerarquía que coincidan: con id: es 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 no se encuentre esta vista. Entonces, ¿por qué Espresso arroja un error? Por favor, sugiera lo que podría estar yendo mal aquí.
usuario846316
Necesitará usar doesNotExist()
en cambio. Encontrado aquí.
Si la vista está en la jerarquía de vistas pero en un estado invisible (la visibilidad está establecida en ‘INVISIBLE’), use not(isDisplayed)
. Sin embargo, si la vista no está en absoluto en la jerarquía de vistas (por ejemplo, la visibilidad se establece en ‘GONE’), doesNotExist()
se usa
-
no me funciona pero
onView(withId(R.id.myTestId)).check(matches(not(isDisplayed())));
funcionó– Sithu
21 de abril de 2016 a las 5:39
-
@Sithu: depende de la aplicación. Si la vista que está buscando está en la jerarquía de vistas pero es invisible, entonces necesita usar not(isDisplayed). Sin embargo, si la vista no está en la jerarquía de vistas, debe usar doesNotExist().
– usuario846316
21 de abril de 2016 a las 11:42
-
Tengo el botón en el diseño, pero configuro la visibilidad.
View.GONE
enonCreate
según el rol de usuario. Entonces, ¿significa que está en la jerarquía de vistas y es invisible?– Sithu
22 de abril de 2016 a las 2:31
-
Si la vista desaparece de la jerarquía de vistas, lo que puede suceder cuando una acción provocó una transición a otra actividad, debe usar ViewAssertions.doesNotExist(): el ejemplo View.GONE en su ejemplo es incorrecto y engañoso. Por favor edite su respuesta
– metis
16 de julio de 2020 a las 10:17
-
View.GONE funciona con not(isDisplayed() pero no funciona con doesNotExist(). doesNotExist devuelve verdadero si la visibilidad SE HA IDO. Intenté con el ejemplo. En el enlace que proporcionó no se dice nada relacionado con View.GONE.
– metis
16 de julio de 2020 a las 16:03
También trabaja con el tuyo método, pero algo como esto:
onView(withId(R.id.next)).check(matches(not(isDisplayed())));
Olivia Liao
onView(withText("")).check(doesNotExist());
-
Esta es una respuesta parcialmente correcta. Esto solo funcionará si la vista de destino no existe en el diseño (la jerarquía de vista no contiene esta vista). Sin embargo, esta afirmación fallará si la vista de destino realmente existe en la jerarquía de vista de diseño, pero su estado de visibilidad es GONE o INVISIBLE. El mensaje de error de aserción en ese caso indicará:
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: View is present in the hierarchy...
– Simon-droide
29 de diciembre de 2016 a las 15:46
-
Correcto, entonces creo que podría verificar el mensaje de error con la jerarquía de vista detallada.
–Olivia Liao
29 de diciembre de 2016 a las 19:54
Pabellón
Puede probar esta opción si marca la visibilidad de la vista “withEffectiveVisibility”
onView(withId(R.id.YOURVIEW)).check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
jimmy0251
Si quieres comprobar si View
es cualquiera no 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());
-
Gracias por esto: en mi humilde opinión, esta es la mejor solución para un “comprobar si la vista se ha ido de la pantalla” generalizada. Sin embargo, una corrección: IME, el uso es
onView(withId(R.id.someView)).check(isNotDisplayed());
– Libra esterlina
5 jun 2018 a las 23:35
-
Gracias por esto: en mi humilde opinión, esta es la mejor solución para un “comprobar si la vista se ha ido de la pantalla” generalizada. Sin embargo, una corrección: IME, el uso es
onView(withId(R.id.someView)).check(isNotDisplayed());
– Libra esterlina
5 jun 2018 a las 23:35