Falso positivos: junit.framework.AssertionFailedError: EditText no se encuentra
Tengo problemas para configurar las pruebas Robotium para ejecutar en Travis sin falsas posividades aleatorias.
Cada par de construcciones que obtengo
- Travis ci build failing - causa: PermGen espacio
- Prueba de instrumentación de Android falla en Travis CI AVD pero funciona en emulador local
- ¿Es gradlew obligatorio para que travis CI funcione?
- Cómo corregir el permiso gradlew denegado en travis.yml?
- Archivo de clase para android.support.v4.widget.DrawerLayoutImpl no se encuentra en travis support-v4 21.0
pl.mg6.agrtt.TestActivityTests > testCanEnterTextAndPressButton[test(AVD) - 4.4.2] FAILED junit.framework.AssertionFailedError: EditText is not found! at com.robotium.solo.Waiter.waitForAndGetView(Waiter.java:540)
en todas mis pruebas.
He creado un proyecto simple en GitHub para mostrar el problema.
Usted puede ver cómo se basa en Travis . La generación de la nota # 7 falló después de modyfing el archivo no relacionado.
Estoy sospechando que esto se debe a que el emulador está bloqueado o su atenuado está apagado. Podría reproducir este problema en la máquina local apagando la pantalla del dispositivo conectado y luego ejecutándolo
./gradlew connectedAndroidTest
Después de las pruebas de modyfing recibí un mensaje de error diferente, que es algo más informativo, por lo que lo estoy añadiendo por si alguien intenta encontrar una solución:
pl.mg6.agrtt.TestActivityTests > testCanFindViewsEnterTextAndPressButton[test(AVD) - 4.4.2] FAILED junit.framework.AssertionFailedError: Click at (160.0, 264.0) can not be completed! (java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission) at com.robotium.solo.Clicker.clickOnScreen(Clicker.java:106)
- ¿Cómo debo configurar Travis-CI para una biblioteca de Android?
- No se puede construir el proyecto con Travis-CI y Android
- Travis CI Android Tests: no hay dispositivos conectados
- Travis CI skip pruebas (Gradle Android proyecto)
- Travis CI Build falla en la aplicación de Android Versión de major.minor no compatible 52
- Leer versionName de build.gradle en bash
- Variantes de construcción de Android en travis.ci
- Travis CI se queda atascado en la creación de herramientas de construcción en Android
Aunque la causa raíz de este problema todavía me es desconocida, después de alguna investigación y con la ayuda del autor de Robotium, Renas Reda , pude confirmar lo que inicialmente sospechaba que el emulador ciertamente se bloquea.
Una solución que estoy usando ahora es este código puesto en el método setUp
:
getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); } });
Robotium descarta las vistas invisibles cuando se utiliza enterText(int, String)
. En su lugar use getView(int)
de Solo
para usar la vista resultante en enterText(View, String)
.
Me gusta esto:
public void testCanEnterTextAndPressButton() { solo.enterText(((EditText) solo.getView(R.id.editText1)), "my login"); solo.enterText(((EditText) solo.getView(R.id.editText2)), "my password"); solo.clickOnView(solo.getView(R.id.button)); }
Y si la pantalla del dispositivo está bloqueada Robotium falla en ejecutar las instrucciones que dio. Es posible que desee desactivar el bloqueo de pantalla.
Por código arriba mis pruebas pasan.
Su conjetura es probablemente la correcta. Una forma de estar seguro de que es es coger la excepción que se lanza y llamar
solo.takeScreenshot("screenshotFileName");
y luego echar un vistazo a la captura de pantalla que se guarda en la tarjeta SD de su teléfono para ver lo que su teléfono estaba haciendo en el momento del error.
Solucioné este problema activando el ajuste "Stay Awake" del dispositivo para que no se duerma durante la recarga.
- ¿Cómo puedo "previsualizar el diseño" de un archivo xml en Android?
- Aplicaciones flash android sin instalar adobe air