Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


TestUI (Jenkins) utilizando espresso

La aplicación está pasando las pruebas de espresso localmente, quiero decir directamente a los dispositivos y los emuladores genymotion. Cuando utilizo Jenkins para crear la imagen de una aplicación. La prueba del espresso no tiene éxito Consigo este error.

JENKINS:

java.lang.RuntimeException: Waited for the root of the view hierarchy to have window focus and not be requesting layout for over 10 seconds. If you specified a non default root matcher, it may be picking a root that never takes focus. Otherwise, something is seriously wrong. Selected Root: Root{application-window-token=android.view.ViewRootImpl$W@536a97d4, window-token=android.view.ViewRootImpl$W@536a97d4, has-window-focus=false, layout-params-type=1, layout-params-string=WM.LayoutParams{(0,0)(fillxfill) sim=#100 ty=1 fl=#1810100 pfl=0x8 wanim=0x103028f}, decor-view-string=DecorView{id=-1, visibility=VISIBLE, width=800, height=1184, has-focus=true, has-focusable=true, has-window-focus=false, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=1}} . All Roots: Root{application-window-token=android.view.ViewRootImpl$W@536a97d4, window-token=android.view.ViewRootImpl$W@536a97d4, has-window-focus=false, layout-params-type=1, layout-params-string=WM.LayoutParams{(0,0)(fillxfill) sim=#100 ty=1 fl=#1810100 pfl=0x8 wanim=0x103028f}, decor-view-string=DecorView{id=-1, visibility=VISIBLE, width=800, height=1184, has-focus=true, has-focusable=true, has-window-focus=false, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=1}} at com.google.android.apps.common.testing.ui.espresso.base.RootViewPicker.get(RootViewPicker.java:84) at com.google.android.apps.common.testing.ui.espresso.ViewInteractionModule.provideRootView(ViewInteractionModule.java:51) at com.google.android.apps.common.testing.ui.espresso.ViewInteractionModule$$ModuleAdapter$ProvideRootViewProvidesAdapter.get(ViewInteractionModule$$ModuleAdapter.java:187) at com.google.android.apps.common.testing.ui.espresso.ViewInteractionModule$$ModuleAdapter$ProvideRootViewProvidesAdapter.get(ViewInteractionModule$$ModuleAdapter.java:151) at com.google.android.apps.common.testing.ui.espresso.base.ViewFinderImpl.getView(ViewFinderImpl.java:52) at com.google.android.apps.common.testing.ui.espresso.ViewInteraction$2.run(ViewInteraction.java:141) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 

  • Incrementa el número de compilación de Android en Integración continua
  • Emulador de Jenkins y Android: Emulator no parecía comenzar; renunciando
  • Biblioteca resolver a una ruta sin archivo project.properties
  • Falló al crear tarea o tipo checkenv Causa El nombre es indefinido
  • "Aapt" IOException error = 2, No hay tal archivo o directorio "¿por qué no puedo construir mi gradle en jenkins?
  • El emulador de Android no se inició después de 360 ​​segundos
  • Jenkins giving El Directorio SDK no existe
  • El demonio de compilación de Gradle desapareció inesperadamente (puede haber sido destruido o puede haberse estrellado) mientras construía un proyecto de Android en Jenkins
  • 4 Solutions collect form web for “TestUI (Jenkins) utilizando espresso”

    Stacktrace significa que Espresso no puede encontrar la ventana de la aplicación. Durante la prueba en la pantalla de los emuladores generalmente ocultos detrás del bloqueo de pantalla. Necesita utilizar algún código para desactivar ScreenLock mediante programación. La forma más conveniente para desbloquear la pantalla es usar Robotium. Tiene el método solo.unlockScreen (). Lo he puesto en el método setUp () de probar el ciclo de vida.

    Enlaces: https://github.com/RobotiumTech/robotium/blob/master/robotium-solo/src/main/java/com/robotium/solo/Solo.java

    La solución es crear un corredor de prueba personalizado para desbloquear la pantalla e iniciar un bloqueo de despertador hasta que se realicen las pruebas.

     public class TestRunner extends android.support.test.runner.AndroidJUnitRunner { private PowerManager.WakeLock mWakeLock; @Override public void callApplicationOnCreate(Application app) { // Unlock the screen KeyguardManager keyguard = (KeyguardManager) app.getSystemService(Context.KEYGUARD_SERVICE); keyguard.newKeyguardLock(getClass().getSimpleName()).disableKeyguard(); // Start a wake lock PowerManager power = (PowerManager) app.getSystemService(Context.POWER_SERVICE); mWakeLock = power.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, getClass().getSimpleName()); mWakeLock.acquire(); super.callApplicationOnCreate(app); } @Override public void onDestroy() { mWakeLock.release(); super.onDestroy(); } } 

    Luego AndroidManifest.xml de tus pruebas y agrega los permisos necesarios:

     <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> 

    No olvide editar su build.gradle para usar la nueva clase testInstrumentationRunner .

    Fuente

    Desde mi punto de vista, necesitas organizar tu trabajo de Jenkins de la siguiente manera: antes de ejecutar pruebas de Espresso (supongo que has conectadoAndroidTest en una acción de post-build de gradle o algo así), agrega una acción post-build para desinstalar El paquete de aplicaciones y otro para desinstalar el paquete de prueba de la aplicación. Ejemplo: com.example.mypackage.debug y com.example.mypackage.debug.test. Esta es una buena manera de actualizar la aplicación en su smartphone / emulador, para permitir que Espresso use su magia.

    También asegúrese de que tiene activada la opción Siempre activada en Herramientas de desarrollo (dependiendo del dispositivo, en Configuración tiene opciones de desarrollador o submenú Herramientas de desarrollador).

    Si nada de esto funciona, significa que en algún lugar de su trabajo Jenkins tiene algún orden de acciones y necesita ser aclarado. Para mí la desinstalación de los paquetes me ayudó a limpiar el sistema de todas las cosas relacionadas con mi aplicación.

    Esperemos que funcione para usted también.

    Si no, por favor escriba un comentario y yo le ayudaré.

    ¡Buena suerte!

    Sugiero usar Test-Butler , para desactivar la animación y desbloquear la pantalla durante la prueba.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.