2013-02-09 7 views
6

Ich muss Android-App testen, die WebView mit Schaltflächen enthält.Monkeyrunner berührt nicht webview

Monkeyrunner funktioniert gut für alle Teile der App außer WebView. Schaltfläche in WebView ignoriert nur Berührungen von Monkeyrunner. Ich sehe, dass die Schaltfläche angeklickt wird, weil es grau wurde, aber dann tut Button nichts. Wenn ich die Maus auf dem Emulator oder Finger auf einem echten Gerät verwende, funktioniert die Taste großartig.

Ich sehe von Logcat, dass Touch-Ereignis an die App gesendet wurde, aber es gibt keine Aktion von der App.

Einige Code:

final WebView w = (WebView) findViewById(R.id.webView1); 
String summary = "<html><body><b>Google</b><form action=http://google.com><input type=submit><input type=text></form></body></html>"; 
w.loadData(summary, "text/html", null); 

Layout:

<Button android:id="@+id/button1" android:text="Click me!" /> 
<WebView android:id="@+id/webView1" /> 

Monkeyrunner py:

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 
device = MonkeyRunner.waitForConnection(10) 
# android.widget.Button COORDINATES - THIS WORKS FINE 
device.touch(10,100, 'DOWN_AND_UP') 
# WEBVIEW BUTTON COORDINATES - BUTTON DOESN'T WORK 
device.touch(200,200, 'DOWN_AND_UP') 

ich separat versucht hatte Verz UP - das gleiche Ergebnis. Monkeyrunner von Python oder von innen Java funktionieren nicht auch. Flavors und Wrapper für Monkeycrunner wie ChimpChat funktionieren nicht.

Ich denke, es sollte funktionieren, weil es so viele Web/HTML5-Anwendungen gibt und es könnte nicht wahr sein, dass sie alle nicht getestet werden. Aber es scheint das Gegenteil zu sein. Irgendwelche Ideen oder Vorschläge zum Erzwingen eines Berührungsereignisses für WebView-Komponenten?

+0

Testen Sie auf einem Gerät oder Emulator? –

+0

Zumindest sollte es Emulator sein. Ich bevorzuge beides. – Alex

+0

Es funktioniert für mich (wie es ist) auf einem Gerät aber schlägt auf Emulator fehl. –

Antwort

3

Das war ein Fehler, den ich Android-Team berichtet hatte. Einige Leute hatten es bestätigt. Mit der Zeit wurde es jedoch mit einem anderen Fehler verschmolzen und später wurde ein weiterer Fehler geschlossen, der "wie geplant funktioniert". Glücklicherweise hat es nach einigen nächsten Android-Versionen begonnen, so zu funktionieren, wie es sollte.

0

Ich habe den von Ihnen bereitgestellten Beispielcode getestet und konnte ein Touch-Ereignis auf dem WebView-Steuerelement ohne Probleme durchführen. Es gibt ein paar Möglichkeiten, dass ich daran denken konnte, wird es für Sie arbeitet:

  • Vergewissern Sie sich, dass die Berührung an der richtigen Stelle ist zu beachten, dass die Touch-Funktion Bildschirmpixel verwendet und taucht nicht die höchstwahrscheinlich anders sein, wenn Sie versuchen, auf mehreren Geräten zu testen. Sie können die genaue Position der Schaltfläche mithilfe der "Zeigerposition" in der "Dev Tools" -App abrufen, die mit Ihrem Emulator geliefert wird.
  • Sie können Tastaturereignisse anstelle von Berührungsereignissen verwenden, um durch die Benutzeroberfläche zu navigieren.

    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 
    device = MonkeyRunner.waitForConnection(10) 
    device.press('KEYCODE_DPAD_DOWN') 
    device.press('KEYCODE_DPAD_CENTER') 
    

    und die gewünschte Wirkung

0

Dies ist keine Antwort produzieren, aber ich dachte, es könnte helfen: Zum Beispiel, dass Sie die Beispielanwendung bereitgestellt wird, kann wie folgt durchgeführt werden.

Square veröffentlichte ein neues Instrumentationstest-Framework namens "Spoon". Es erlaubt Ihnen, alles zu tun, was Sie möchten, und es funktioniert ziemlich gut auf den wenigen Tests, die ich ausgeführt habe. Ich habe noch keine Web-Views ausprobiert, aber ich denke, dass es auch diese abdecken sollte. Es wurde von Jake Wharton (der Typ hinter ActionBarSherlock) erstellt. Hier ist der Link, wenn Sie es versuchen möchten out:

http://square.github.com/spoon/