Warten, bis Anzeige sichtbar mit IdleResource
Ich Schreibe Instrumentation tests mit Verwendung von Espresso-2.2.
Flow will ich testen:
- radioButton geklickt test
- onClick startet Anfrage an API
- nach jeder Zeit verschiedene Zeit erhalte ich Antwort
- positive Reaktion auslöst interface-Methode, die aufgerufen wird, in der Aktivität
- onRequestSuccess ich mache zusätzliches Bedienfeld auf dem Bildschirm mit dem Namen vSetupAmount sichtbar
Ich möchte mich registrieren IdleResource nach Klick auf den radioButton, so wartet er, bis vSetupAmount sichtbar wird. Aber ich kann nicht damit es funktioniert. Bitte sagen Sie mir, was mache ich falsch.
Habe ich so geschrieben IdleResource:
public class AmountViewIdlingResource implements IdlingResource {
private CountriesAndRatesActivity activity;
private ResourceCallback callback;
private SetupAmountView amountView;
public AmountViewIdlingResource(CountriesAndRatesActivity activity) {
this.activity = activity;
amountView = (SetupAmountView) this.activity.findViewById(R.id.vSetupAmount);
}
@Override public String getName() {
return "Amount View idling resource";
}
@Override public boolean isIdleNow() {
callback.onTransitionToIdle();
return amountView.getVisibility() == View.VISIBLE;
}
@Override public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
this.callback = resourceCallback;
}
}
So, ich bin vorbei an Aktivität zu IdleResource, link view mit Variablen. Ich verstehe, dass IdleResource lassen nicht testen, gehen Sie durch, bis isIdleNow() liefert den Wert true. Also, wenn view-Ansicht.GEGANGEN, dann wird es nicht weiter gehen.
Wie es aussieht im test:
//click of radioButton picked from radioGroup
onView(withId(rgDeliveries.getChildAt(id).getId())).perform(scrollTo(), click());
//wait for view to become visible
Espresso.registerIdlingResources(new AmountViewIdlingResource(getActivity()));
//go to button on view
onView(withId(R.id.btnGetStarted)).perform(scrollTo());
//unregister idle resource
for ( IdlingResource resource : getIdlingResources()) {
Espresso.unregisterIdlingResources(resource);
}
So, ich meine, klicken Sie auf den radioButton. IdleResource erfolgreich registriert, aber es passiert nichts. Auf meinem Gerät API-Antwort kommt. vSetupAmount wird angezeigt, aber
amountView.getVisibility() == View.VISIBLE;
denen geprüft wird, für immer (aber ich sehe, meine Sicht auf Bildschirm) immer false zurück.
Was mache ich falsch?
InformationsquelleAutor F1sher | 2015-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, das könnte zu spät sein, aber meine Antwort kann jemand helfen.
AmountViewIdlingResource
, einen Verweis darauf beibehalten, und nur die Registrierung, die Referenz, nicht aufheben der Registrierung allerIdlingResources
.isIdleNow()
Methode sollte nur rufen Sie die callback -onTransitionToIdle()
Methode, wenn Ihr im Leerlauf Ressource ist wirklich im Leerlauf nicht jedes mal.Ich brauchte, etwas ähnliches zu tun, zu warten, bis eine Taste auf dem Bildschirm angezeigt werden, die wiederum nur sichtbar wird, nachdem ein HTTP-Aufruf beendet. Meine Implementierung einer Sicht Leerlauf-Ressource ist wie folgt:
Hoffe, das hilft
Ihre Tätigkeit-Regel der test ermöglicht es Ihnen, um die Aktivität, dann können Sie findviewbyid oder irgendetwas anderes im Zusammenhang
InformationsquelleAutor Cosmin Radu