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:

  • ¿Cómo puedo eliminar el icono de configuración en la parte superior derecha de la barra de acción?
  • La etiqueta de audio HTML5 no funciona en Android
  • Ejecutar la prueba de instrumentación usando Espresso: Clase ref en la clase pre-verificada resuelto a la implementación inesperada
  • El artículo de DrawerLayout hace clic - ¿Cuándo es el momento adecuado para reemplazar el fragmento?
  • Android parentActivity no se vuelve a crear después de que startActivityForResult regrese
  • Reanude la actividad principal en lugar de iniciar la actividad del lanzador
  • 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) 

  • ¿Cómo mostrar el diálogo de progreso antes de iniciar una actividad en Android?
  • Transmisión de matriz a rsForEach en Renderscript Compute
  • Cómo cambiar el color de un ProgressBar indefinido?
  • Uso de Job Scheduler en la API de Android <21
  • No se puede obtener android MediaPlayer onCompletion para disparar
  • Android que soporta todas las tabletas - categorice dibujos y diseños
  • 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.