web-dev-qa-db-fra.com

PerformException: erreur lors de l'exécution d'un "clic simple"

J'ai eu une erreur quand je lance le test espresso Android:

com.google.Android.apps.common.testing.ui.espresso.PerformException: erreur lors de l'exécution d'un "clic simple" sur la vue "avec l'ID: est <2131034173> '.

Mon code est facile:

onView(withId(R.id.btn)).perform(click());

Mais il n'y a pas d'erreur avec ce code:

onView(withId(R.id.btn)).check(matches(isDisplayed()));

Je ne peux pas trouver la cause pourquoi cela se produit.

29
Winton Hou

L'astuce consiste à lire la trace de pile complète de l'erreur. Au milieu, il y a une information cruciale comme celle-ci:

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.
Target view: "ImageView{id=2131492903, res-name=button_hamburger, desc=opens the side drawer, visibility=VISIBLE, width=64, height=64, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=6.0, y=6.0}"

ce qui explique l'erreur en détail.

67
Alexander Pacha

Essayez de vous assurer que le clavier logiciel n'est pas affiché. Il peut facilement être fermé avec le closeSoftKeyboard ViewAction. 

De plus, assurez-vous que les animations du système sont désactivées. Sous Paramètres -> Options de développement, désactivez ce qui suit: 

  • Échelle d'animation de fenêtre
  • Échelle d'animation de transition
  • Échelle de durée de l'animateur

En outre, cela peut être dû aux dialogues ANR d'autres applications. 

Un problème a été signalé ici aussi.

25
appoll

J'ai eu le même problème parce que le clavier logiciel recouvrait l'élément. J'ai utilisé scrollTo () suivi de click () pour résoudre le problème.

onView(withId(R.id.btn))
     .perform(scrollTo())
     .perform(click());

Si ci-dessus ne fonctionne pas, essayez d'abord d'ajouter ce qui suit:

onView(withId(R.id.myEditText)).perform(closeSoftKeyboard());
20
Prabin Timsina

J'ai eu ce problème même en utilisant

onView(withId(R.id.myEditText)).perform(closeSoftKeyboard());

Ce que j’ai découvert, c’est que dans mon cas, sur certains appareils,Every Timej’ai utilisé

onView(withId(R.id.myEditText)).perform(TypeTextAction());

C'était comme si le système empilait un nouveau clavier l'un sur l'autre, donc ce qui résolut mon problème était deTOUJOURSutiliser closeSoftKeyboard () CHAQUE FOIS j'ai utilisé TypeTextAction comme ceci.

onView(withId(R.id.myEditText)).perform(typeTextAction(), closeSoftKeyboard());

Donc, si j'avais besoin de modifier un formulaire, ce serait comme: 

onView(withId(R.id.myEditText1)).perform(typeTextAction(), closeSoftKeyboard());
onView(withId(R.id.myEditText2)).perform(typeTextAction(), closeSoftKeyboard());
onView(withId(R.id.myEditText3)).perform(typeTextAction(), closeSoftKeyboard());
onView(withId(R.id.myEditText4)).perform(typeTextAction(), closeSoftKeyboard());

Si la vue n'est pas visible pendant le test ... utilisez perform(scrollTo())... Elle défilera et l'action cliquera.

Exemple :-

 onView(withId(R.id.btn)).perform(scrollTo()).perform(click());
3
Krishna

J'ai le même problème, mais la cause en est:

Caused by: Android.support.test.espresso.AppNotIdleException: Looped for 3713 iterations over 60 SECONDS. The following Idle Conditions failed .

Je ne sais pas où est le problème car il clique sur le bouton qui passe à la prochaine activité, mais on dirait qu'il recherche toujours le bouton après.

3
maudem

J'ai eu le même problème, et résolu en modifiant la position de l'élément.

Il n'y a pas d'élément sur la position où j'essayais de cliquer. Essayer de cliquer sur la position 3 mais l'élément est en 2e position (complètement oublié que l'index commence à 0) J'ai donc changé la position de l'élément et cela fonctionne parfaitement maintenant

0
jyo cool

il y a peu de raisons pour que cela puisse arriver. dans mon cas, c’était parce qu’après avoir cliqué sur un bouton, un progress bar continuait de tourner pour toujours, alors assurez-vous que s’il ya un appel réseau ou un processus en attente, vous arrêtez la barre de progression après la réception du rappel . Pour que certaines actions se produisent, assurez-vous que vous ne cliquez pas mais que vous effectuez des actions lorsque vous cliquez.

0
Vilen