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

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) 

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.

  • Las pruebas de Android fallan en Travis con ShellCommandUnresponsiveException
  • Travis CI Android - No encuentra la versión que coincide
  • Com.android.builder.testing.ConnectedDevice> hasTests FALLA
  • Cómo ejecutar Prueba Travis-CI y Espresso
  • No se puede configurar travis para trabajar en el proyecto android
  • Travis-CI Android pruebas con Gradle mantener el tiempo de espera
  • "Invalid --abi armeabi-v7a para el destino seleccionado" con las API de Google
  • Almacenamiento en caché del SDK de Android en Travis CI
  • ¿Hay alguna manera de ejecutar un conjunto específico de pruebas en un proyecto de Android Gradle?
  • Travis CI falló porque no puede aceptar licencia Constrain Layout
  • ¿Cómo configurar un emulador que ejecuta API 25 usando una matriz de compilación en Travis CI?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.