Cliquez sur pas entièrement visible imageButton avec Espresso
J'ai un custom ImageButton
qui n'est pas entièrement visible, de par sa conception, alors quand j'ai effectuer un clic, j'obtiens cette erreur:
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)
Une petite partie de la touche est en dehors de l'écran (c'est à dire qu'il est rognée sur le haut), peut-être que 12% de la touche est en dehors de l'écran. C'est par la conception, et il n'est pas possible de faire défiler ou d'exécuter toute action vue de le rendre visible.
Tout savoir comment sortir de cette à 90% par la contrainte?
Solution:
J'ai créé mon propre cliquez sur action, comme l'a suggéré, et il a parfaitement fonctionné.
J'ai copié la classe de Google Espresso et changé de 90 à 75 dans cette méthode:
@Override
@SuppressWarnings("unchecked")
public Matcher<View> getConstraints() {
Matcher<View> standardConstraint = isDisplayingAtLeast(75);
if (rollbackAction.isPresent()) {
return allOf(standardConstraint, rollbackAction.get().getConstraints());
} else {
return standardConstraint;
}
}
- le rollbackAction partie du code a été de me donner le message d'erreur de compilation, et il ne pouvait pas être automatiquement importées
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas qu'il y est tout facile, solution élégante à ce. Le 90% de la contrainte est codé en dur dans
GeneralClickAction
, et la classe est en finale, on ne peut donc pas remplacergetConstraints
.Je voudrais écrire votre propre ViewAction basé sur
GeneralClickAction
's code, en ignorant laisDisplayingAtLeast
vérifier.import android.support.test.espresso.core.deps.guava.base.Optional;
lorsque le compilateur se plaintAucun des ci-dessus a fonctionné pour moi. Voici une correspondance personnalisée qui supprime complètement de cette contrainte et vous permet de cliquer sur la vue
isEnabled()
méthodeImageButton
à l'extérieur de la zone d'affichage. Comment pourrais-je clique sur elle? C'est à l'intérieurRelativeLayout
pas unScrollView
.Que vous avez à faire défiler jusqu'à la touche avant:
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(...)
. Si il serait un bouton dans l'adaptateur, puis définitivementonData(...)
doit être utilisé conformément à la documentation.scrollTo()
ne permet pas de résoudre partiellement affichées bouton. Je pense que le bouton est partiellement affichée carisDisplayed()
est de réussir tout enisCompletelyDisplayed()
échoue.ListView
crée des vues paresseusement, donc, si vous voulez accéder à un élément qui n'est pas visible et pourtant, la vue associée à cet élément peut ne pas exister encore.onData
nous permet d'interagir en toute sécurité avec des articles qui peuvent ne pas avoir les vues associées. (Je réalise que c'est vieux, mais au cas où quelqu'un a la même question...)Par défaut, cliquez sur de la machine à Expresso est exigeant la visibilité de vue
> 90%
. Que pensez-vous de la création d'un propreclick
ViewAction?C'est comme ça...
Ce cliquez cliquez sur sur le centre de votre point de vue.
Puis vous pouvez cliquez sur exécuter comme ceci:
onView(withId(....)).perform(MyViewActions.click());
J'espère que cela pourrait fonctionner.
Thread.sleep(1000);
avant de cliquer dessus.....Cela m'a aidé à résoudre le bouton de la visibilité lors de l'exécution de mes tests
Pour le même message d'erreur sur l'affichage de texte j'ai fini par faire comme ci-dessous, les réponses postées ci-dessus et d'autres questions ont été d'une grande utilité. Je l'ai fait essayer
scrollTo
méthode, mais pour une raison quelconque, l'erreur persiste. Espérons que cela aide quelqu'un.