Robotium UI Test für App mit Navigationsschublade

Wir haben die App mit Navigation Drawer von support.v4 Bibliothek. Wir automatisieren UI-Tests mit Robotium und alles ist in Robotium , aber Navigation Drawer kann nach dem Zufallsprinzip einfrieren, so dass einige Tests zufällig ausfallen können.

Das ist definitiv kein Robotium Problem, denn ich habe gesehen, wie Navigation Drawer in einigen anderen Apps auf meinem Gerät gefriert wird, auch in meinen eigenen Apps.

Ich habe bereits versucht, für Navigation Drawer aus der Frage der Frage zu fragen: Warum schlägt DrawerLayout manchmal beim Öffnen?

Es half und zufällige Einfrierungen sank von 90% auf etwa 10%, aber 10% der Testläufe können scheitern und das ist sehr schlecht, vor allem für die kontinuierliche Integration …

Kann jemand schon dieses Problem behoben haben?

  • So fügen Sie ein Element zu einer Menügruppe in Navigationsansicht hinzu
  • Android Navigation Schublade über die Registerkarten
  • Änderungsfragment (?) Layout oder Aktivität mit Hilfe einer Navigationsschublade
  • Umschalten zwischen Android Navigation Schublade Bild und Up Caret bei der Verwendung von Fragmenten
  • Navigations-Rendering-Fehler im ADT-Layout-Editor
  • OnItemClickListener Navigation Schublade
  • Beste Möglichkeit, eine Navigationsschublade zu scrollen
  • Sie müssen eine nicht null-Ansicht übergeben
  • 3 Solutions collect form web for “Robotium UI Test für App mit Navigationsschublade”

    Ich stieß auf das gleiche Problem mit unseren Robotium-Tests und die Lösung, die ich am Ende ging mit war, um eine Drag-Geste zu simulieren (wie ein echter Benutzer würde öffnen Sie die Schublade) anstatt zu versuchen, klicken Sie auf die Schublade umschalten oder mit den solo Methoden. Ich schien zu bemerken, die intermittierende fehlschlägt häufiger auf Geräten mit Android älter als SDK 18.

    Ich habe diese Methode in unsere eigene Unterklasse von Solo und wir haben seitdem keinen Fehler gemacht (über Hunderte von Läufen).

     /** * 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); } 

    Ich benutze auch android.support.v4.widget.DrawerLayout und fand keine Möglichkeit, es einfach zu tun.

    Ich schaffte es endlich, die Schublade zu öffnen, indem ich den Code unten benutzte

     /** * 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 hier erhältlich https://gist.github.com/quentin7b/9b51a3827c842417636b

    Open Schublade Navigation: solo.clickOnScreen(50, 50);

    Wählen Sie den Eintrag in der Schublade Navigation:

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

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.