2015-08-18 14 views
26

Gibt es eine zuverlässige Möglichkeit, Espresso darauf zu warten, dass WebViews vollständig geladen werden?Lassen Sie Espresso warten, bis WebView den Ladevorgang beendet hat

Ich habe den Ansatz beschrieben here versucht, fand es aber unzuverlässig. Es hat auch andere Nachteile:

  • Es beruht auf dem WebChromeClient WebView ersetzen. Ein vorhandener WebChromeClient kann nicht umgebrochen werden, da WebViewrt aus irgendeinem Grund keine getWebChromeClient() -Methode hat.
  • Es erfordert eine bestimmte WebView-Instanz. Daher muss ich jedes Mal, wenn ich eine Aktivität mit einem WebView starte, die WebView-Instanz abrufen und eine neue WebviewIdlingResource dafür registrieren.

Ich hoffe, jemand hat eine Lösung ohne diese Nachteile. Ich hatte gehofft, dass das espresso-web-Paket eine Lösung bieten könnte, aber es scheint nichts mit dem Laden zu tun zu haben.

+0

Ich habe dies gefunden: https://github.com/awslabs/aws-device-farm-sample-app-for-android/blob/a8aa3218fda2a0c72b039f371a1b5d12e522051f/app/src/androidTest/ java/com/amazonaws/devicefarm/android/referenzapp/IdlingResources/WebViewIdlingResource.java – piotrek1543

Antwort

6

Wie Sie bereits erwähnt haben, gibt es ein Espresso-Add-On namens espresso-web für den Umgang mit Webviews und deren Inhalten.

"Finish Loading" ist ein bisschen ein vages Konzept. Es hängt davon ab, was speziell für Sie zu beenden möchten.

Wenn Sie onWebView().check(<the you want to finish is in your webview>) verwenden, wird nur zurückgegeben, nachdem die Webansicht geladen wurde und check erfolgreich ist.

Espresso-Web ist ein Einstiegspunkt, um mit WebViews auf Android zu arbeiten. Es verwendet Atome aus der populären WebDriver-API, um das Verhalten eines WebViews zu untersuchen und zu steuern.

Ähnlich wie bei onData bestehen WebView-Interaktionen tatsächlich aus mehreren View-Atomen. Ein Atom kann als ViewAction betrachtet werden, eine eigenständige Einheit, die eine Aktion in Ihrer Benutzeroberfläche ausführt. Sie müssen jedoch richtig instrumentiert und ziemlich ausführlich sein. Web und WebInteraction umhüllen dieses Muster und verleihen der Interaktion mit WebViews ein Espresso-ähnliches Feeling.

https://google.github.io/android-testing-support-library/docs/espresso/web/index.html

+0

Das beantwortet nicht die Frage –

+4

Ich habe nicht auf eine Weile, aber wenn ich mich richtig erinnere 'check() 'wird sofort scheitern wenn Der Inhalt ist noch nicht geladen. Mit anderen Worten, ich muss warten, bis der Inhalt geladen ist, bevor ich ihn anrufe. – vaughandroid

+0

was @vaughandroid sagte –

Verwandte Themen