2014-02-18 3 views
18

Wir haben die App mit Navigation Drawer von support.v4 Bibliothek. Wir automatisieren UI-Tests mit Robotium und alles ist in Ordnung, aber Navigation Drawer kann zufrieren, so dass einige Tests zufällig fehlschlagen können.Robotium UI testen für App mit Navigationsschublade

Dies ist definitiv kein Robotium Problem, weil ich sah, wie Navigation Drawer in einigen anderen Anwendungen auf meinem Gerät, auch in meinen eigenen Apps freezed wird.

Ich habe bereits versucht fix für Navigation Drawer aus dieser anwer Frage: Why does DrawerLayout sometimes glitch upon opening?

Es half und zufällige gefriert von 90% auf etwa 10% zurückgegangen, aber 10% der Testläufe kann fehlschlagen, und das ist sehr schlecht, vor allem für Kontinuierliche Integration ...

Darf schon jemand dieses Problem behoben haben?

+0

Es ist schon eine Weile her, seit du das gefragt hast, hast du irgendeine Möglichkeit gefunden, mit diesem Problem umzugehen? – Mendhak

+1

Nein, aber unser QA-Techniker schlug vor, zu versuchen, die Navigationsschublade in der Schleife zu öffnen und die Sichtbarkeit seiner Elemente zu überprüfen. Wenn es in Ordnung ist, brechen Sie die Schleife ab. Sie können diesen Ansatz versuchen –

+0

Klingt gut. Ich habe auch mit 'solo.setNavigationDrawer (Solo.OPENED);' gespielt, das in Robotium 5.1 auftauchte. und 'solo.sendKey (Solo.MENU);' mehrmals (Ich habe das Menü verdrahtet, um die Schublade zu öffnen). Ich werde deinen Vorschlag versuchen, es klingt viel einfacher. – Mendhak

Antwort

3

Ich stieß auf das gleiche Problem mit unseren Robotium-Tests und die Lösung bestand darin, eine Ziehgeste zu simulieren (wie ein echter Benutzer die Schublade öffnen würde), anstatt zu versuchen, auf die Schublade zu klicken oder solo zu verwenden Methoden. Ich schien die Unterbrechungen häufiger auf Geräten mit Android älter als SDK 18 zu bemerken.

Ich legte diese Methode in unserer eigenen Unterklasse von Solo und wir hatten keinen Fehler Test seit (ü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); 
} 
2

ich android.support.v4.widget.DrawerLayout auch bin mit und fand keine Möglichkeit, es einfach zu tun.

ich es endlich geschafft, die Schublade zu öffnen, indem Sie den Code unten

/** 
* 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 verfügbar hier mit https://gist.github.com/quentin7b/9b51a3827c842417636b

+0

cool, vielen Dank – NickUnuchek

0

Schublade öffnen Navigation: solo.clickOnScreen(50, 50);

in Schublade Navigation wählen Listeneintrag:

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