2 Stimmen

TouchUtils.clickView() funktioniert nicht auf dem SlidingDrawer-Button in Unit-Tests.

Ich versuche, automatisierte Tests für meine App zu implementieren.

Ich habe eine Schubladenansicht, die sich öffnet, wenn sie berührt wird, darin befindet sich ein Knopf. Was ich tun möchte, ist die Schubladenansicht zu berühren, um sie zu öffnen, den Knopf darin zu berühren und dann die Schubladenansicht wieder zu schließen, indem ich sie erneut berühre.

Hier ist ein Stück Code meiner Tests (ActivityInstrumentationTestCase2)

ToggleButton insideBtn = (ToggleButton) mActivity.findViewById(R.id.sliding_btn);
Button drawerBtn = (Button) mActivity.findViewById(R.id.drawer_btn);
TouchUtils.tapView(this,drawerBtn); 
TouchUtils.tapView(this, insideBtn);
TouchUtils.tapView(this, drawerBtn);
...some assertion ...

Ich habe festgestellt, dass dieser Code manchmal funktioniert, manchmal aber auch nicht. Das Problem ist, dass die Schublade nach der Berührung nicht geöffnet wird, was dazu führt, dass der insideBtn nicht berührt werden kann.

Also habe ich diesen Code ausprobiert:

ToggleButton insideBtn = (ToggleButton) mActivity.findViewById(R.id.sliding_btn);
Button drawerBtn = (Button) mActivity.findViewById(R.id.drawer_btn);
SlidingDrawer drawer = (SlidingDrawer) mActivity.findViewById(R.id.drawer);
while(!drawer.isOpened()) {
    TouchUtils.tapView(this,drawerBtn);
}   
TouchUtils.tapView(this, insideBtn);
TouchUtils.tapView(this, drawerBtn);
...some assertion ...

Aber das Ergebnis ist, dass manchmal, wenn der Test funktioniert, es beim ersten Mal funktioniert, so dass die Schleife nicht erforderlich ist. Aber wenn es nicht funktioniert, läuft die Schleife unendlich lang - keine Berührung führt dazu, dass die Schublade geöffnet wird.

Haben Sie Ideen, wie man diesen Test so schreiben kann, dass er zuverlässig funktioniert?

1voto

Michal Punkte 2044

Ich habe die Lösung gefunden. Der Fehler liegt in der falschen Auswahl des Ereignisses, das zum Öffnen des SlidingDrawer verwendet wird.

Die Android-Dokumentation besagt, dass der SlidingDrawer eine Komponente aus zwei Kindansichten besteht: dem Handle, das die Benutzer ZIEHEN...

Also muss die Methode TouchUtils.dragView() anstelle von TouchUtils.tapView() verwendet werden.

Hier ist ein funktionierendes Beispiel:

ToggleButton insideBtn = (ToggleButton) mActivity.findViewById(R.id.sliding_btn);
Button drawerBtn = (Button) mActivity.findViewById(R.id.drawer_btn);
TouchUtils.dragViewToTop(this,drawerBtn); 
TouchUtils.tapView(this, insideBtn);
TouchUtils.dragViewToBottom(this,mActivity,drawerBtn);
...Einige Überprüfungen...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X