Klicken Sie auf nicht vollständig sichtbar sind, imageButton mit Espresso
Habe ich eine benutzerdefinierte ImageButton
ist nicht vollständig sichtbar, vom design, also wenn ich eine Klick-Aktion bekomme ich diesen Fehler:
android.support.test.espresso.PerformException: Error performing 'single click' on view 'with id: test.com.myproject.app:id/navigationButtonProfile'.
Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints:
at least 90 percent of the view's area is displayed to the user.
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Einen kleinen Teil der Schaltfläche, wird außerhalb des Bildschirms (d.h. er wird zugeschnitten auf die Spitze), vielleicht 12% der button außerhalb des Bildschirms. Dies ist gewollt, und es ist nicht möglich zu Blättern oder führen Sie eine beliebige Ansicht Aktion um es sichtbar zu machen.
Jeder weiß, wie man in der Vergangenheit dieser 90%-Einschränkung?
Lösung:
Ich habe meine eigenen klicken Sie auf Aktion wie vorgeschlagen und es funktionierte perfekt.
Ich kopierte die Klasse von Google Espresso und verändert, von 90 auf 75, die in dieser Methode:
@Override
@SuppressWarnings("unchecked")
public Matcher<View> getConstraints() {
Matcher<View> standardConstraint = isDisplayingAtLeast(75);
if (rollbackAction.isPresent()) {
return allOf(standardConstraint, rollbackAction.get().getConstraints());
} else {
return standardConstraint;
}
}
- die rollbackAction Teil des Codes war mir kompilieren Fehler und könnte es nicht sein auto importiert
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass es keine einfache, elegante Lösung. Die 90% - Einschränkung ist fest in
GeneralClickAction
, und die Klasse ist endgültig, so können wir nicht außer Kraft gesetztgetConstraints
.Ich würde schreiben Sie Ihre eigenen ViewAction basierend auf
GeneralClickAction
's code, das überspringen derisDisplayingAtLeast
überprüfen.import android.support.test.espresso.core.deps.guava.base.Optional;
wenn der compiler meckertKeiner der oben genannten für mich gearbeitet. Hier ist ein eigener matcher, die vollständig entfernt, die Einschränkung und ermöglicht es Ihnen, klicken Sie auf die Ansicht
isEnabled()
MethodeImageButton
außerhalb des dargestellten Bereichs. Wie konnte ich darauf klicken? Es ist inRelativeLayout
keinScrollView
.Müssen Sie scrollen, um die Schaltfläche vor:
Note that in order to scroll the list you shouldn't use {@link ViewActions#scrollTo()} as * {@link Espresso#onData(org.hamcrest.Matcher)} handles scrolling.
onView(...)
. Wenn wäre es ein button-in-adapter, dann auf jeden FallonData(...)
sollte verwendet werden, gemäß der Dokumentation.scrollTo()
nicht lösen, die teilweise angezeigte Taste. Ich denke der button ist teilweise angezeigt werden, daisDisplayed()
ist erfolgreich, währendisCompletelyDisplayed()
ausfällt.ListView
erstellt Ansichten träge, so dass, wenn Sie möchten, navigieren Sie zu einem Element, das nicht sichtbar und doch, der Blick in Zusammenhang mit diesem Artikel könnte es noch nicht.onData
können uns sicher interagieren mit Elementen, die möglicherweise nicht zugeordnete Ansichten. (Ich weiß, das ist alt, aber falls jemand die gleiche Frage...)Dies hat mir geholfen, zu beheben Schaltfläche Sichtbarkeit beim laufen meine tests
Standard klicken Sie auf der Espresso ist vorzuschreiben, dass die Sichtbarkeit der anzeigen
> 90%
. Was denken Sie über das erstellen eines eigenenclick
ViewAction?So...
Klicken Sie auf klicken Sie auf die Mitte Ihrer Sicht.
Dann könnten Sie ausführen, klicken Sie auf, wie diese:
onView(withId(....)).perform(MyViewActions.click());
Ich hoffe, dass es funktionieren könnte.
Thread.sleep(1000);
bevor Sie darauf klicken.....Für die gleichen Fehler, die auf einem text das ich am Ende Tat, wie weiter unten, die Antworten oben gepostet und die anderen Fragen, waren sehr hilfreich. Ich habe versucht
scrollTo
Methode, aber aus irgendeinem Grund blieb der Fehler bestehen. Hoffe, das jemand hilft.