android robotium navigation-drawer

android - Pruebas de interfaz de usuario de Robotium para la aplicación con el cajón de navegación



navigation-drawer (3)

Abrir el cajón de navegació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);

Obtuvimos la aplicación con Navigation Drawer de la biblioteca support.v4 . Automatizamos las pruebas de interfaz de usuario con Robotium y todo está bien, pero el Navigation Drawer puede congelarse aleatoriamente, por lo que algunas pruebas pueden fallar aleatoriamente.

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

Ya intenté corregir para Navigation Drawer partir de la respuesta de esta pregunta: ¿Por qué DrawerLayout a veces falla al abrir?

Ayudó y las congelaciones aleatorias disminuyeron del 90% a aproximadamente el 10%, pero el 10% de las ejecuciones de prueba pueden fallar y esto es muy malo, especialmente para la integración continua ...

¿Puede ser alguien que ya haya solucionado este problema?


Encontré el mismo problema con nuestras pruebas de Robotium y la solución que obtuve fue simular un gesto de arrastre (cómo un usuario real deslizaría el cajón) en lugar de intentar hacer clic en el botón del cajón o usar los métodos de solo . Parecía que notaba las fallas intermitentes con más frecuencia en dispositivos con Android más antiguos que SDK 18.

Coloqué este método en nuestra propia subclase de Solo y no hemos tenido una prueba fallida desde entonces (en cientos de ejecuciones).

/** * 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 también y no encontré ninguna forma de hacerlo simplemente .

Finalmente logré abrir el cajón usando el código de abajo

/** * 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