Prueba de interfaz de usuario de Robotium para la aplicación con el cajón de navegación

Conseguimos la aplicación con el Navigation Drawer de la biblioteca de support.v4 . Automatizamos las pruebas de la interfaz de usuario con Robotium y todo está bien, pero el Navigation Drawer puede congelarse de forma aleatoria para que algunas pruebas puedan fallar al azar.

Éste no es definitivamente un problema de Robotium , porque vi cómo el Navigation Drawer se congela en algunas otras aplicaciones en mi dispositivo, también en mis propias aplicaciones.

Ya he intentado arreglar para el Navigation Drawer de la pregunta de esta pregunta: ¿Por qué DrawerLayout a veces falla al abrir?

Ayudó y heladas aleatorias disminuyó de 90% a alrededor de 10%, pero 10% de las pruebas pueden fallar y esto es muy malo, especialmente para la integración continua …

Puede ser que alguien ya solucionado este problema?

Encontré el mismo problema con nuestras pruebas Robotium y la solución con la que acabé de ir era simular un gesto de arrastre (cómo un usuario real abriría el cajón) en vez de intentar hacer clic en el conmutador del cajón o usar los métodos a solo . Parecía notar los fallos intermitentes con más frecuencia en los dispositivos que ejecutan Android más antiguos que el SDK 18.

Coloqué este método en nuestra propia subclase de Solo y no hemos tenido una prueba fallida ya que (más de cientos de carreras).

 /** * Open the navigation drawer with a drag gesture. Click based triggering is * flaky on SDK < 18 */ public void openNavigationDrawer() { Point deviceSize = new Point(); getCurrentActivity().getWindowManager().getDefaultDisplay().getSize(deviceSize); int screenWidth = deviceSize.x; int screenHeight = deviceSize.y; int fromX = 0; int toX = screenWidth / 2; int fromY = screenHeight / 2; int toY = fromY; this.drag(fromX, toX, fromY, toY, 1); } 

Estoy usando android.support.v4.widget.DrawerLayout demasiado y no encontré ninguna manera de hacerlo simplemente .

Finalmente logré abrir el cajón usando el código que se muestra a continuación

 /** * As we use app compat it seems Solo#setNavigationDrawer is not doing well * (drawer does not open, but the button is clicked) * * Same result for clickOnView(getView(android.R.id.home)) * * This code opens the navigation drawer on the main thread * Be aware : you need to provide your DrawerLayout id (you can do it in params) */ public void openCompatNavigationDrawer() { getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { ((DrawerLayout) mSolo.getView(R.id.drawer_layout)) .openDrawer(Gravity.LEFT); } }); } 

Gist disponible aquí https://gist.github.com/quentin7b/9b51a3827c842417636b

Navegación abierta del cajón: solo.clickOnScreen(50, 50);

Elija el elemento de la lista en la navegación del cajón:

ListView listView = (ListView) solo.getView(R.id.left_drawer); View SwitchOrganizations = listView.getChildAt(0); solo.clickOnView(SwitchOrganizations);

  • Cómo probar automáticamente onResume el comportamiento llamando onDestroy usando Robotium?
  • Robotium. En la serie de pruebas cada prueba siguiente es afectada por la prueba anterior
  • Cómo inyectar el evento de clic con Android UiAutomation.injectInputEvent
  • Cuchara + TeamCity
  • Ejemplos de Robotium
  • Android Robotium - ¿Cómo administrar el orden de ejecución de los testcases?
  • ¿Cómo usar Robotium con Android Studio?
  • No es posible hacer clic en barra de acción en robotium
  • ¿Por qué obtengo un NoClassDefFoundError al ejecutar mi prueba en ActionBarActivity?
  • Manera correcta de abrir NavigationDrawer y seleccionar elementos en Robotium
  • ¿Cómo puedo ejecutar una sola prueba con gradle android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.