PerformException: Error performing 'single cli

2019-03-22 15:01发布

问题:

I got a error when i run android espresso test:

com.google.android.apps.common.testing.ui.espresso.PerformException: Error performing 'single click' on view 'with id: is <2131034173>'.

My code is easy:

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

But there is no error with this code:

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

I can not find the cause why it happen.

回答1:

The trick is to read the full stack-trace of the error. In the middle, there is some crucial piece of information like this:

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}"

which explains the error in detail.



回答2:

Try to make sure that the soft keyboard is not showing. It can easily be closed with the closeSoftKeyboard ViewAction.

Moreover, make sure that system animations are disabled. Under Settings -> Developing Options turn off the following:

  • Window animation scale
  • Transition animation scale
  • Animator duration scale

Also, this might be caused by ANR dialogs from other apps.

There's been an issue reported here as well.



回答3:

I had the same problem because the soft keyboard was overlapping the element. I used scrollTo() followed by click() to resolve the issue.

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

If above does not work, try adding the following first:

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


回答4:

I had that problem even using

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

What I found out, was that in my case, on some devices, Each Time I used

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

It was like the system stacked a new keyboard on top of another, so what solved my problem was to ALWAYS use closeSoftKeyboard() EVERY-TIME I used TypeTextAction Like this.

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

So if I needed to edit a form it would be like:

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());


回答5:

If the view is not visible during the testing...use perform(scrollTo())...It will scroll and click action will perfrom.

Example :-

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


回答6:

I have this same problem, but the cause is :

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

I don't know where is the problem as it does click on the button which go to the next Activity, but it looks like it still researching for the button after



回答7:

I had the same issue, And solved it by changing the position of the element.

There is no element on the position where I was trying to click. Trying to click on position 3 but the element is at 2nd position(Completely forgot that index starts from 0) So, I changed the position of the element and its working perfectly now



回答8:

there are few reasons this can happen. in my case it was because after clicking a button there was a progress bar that continued spinning forever, so make sure if there is a network call or some waiting process, you stop progress bar after callback is received. also performing a click waits for some action to happen so make sure you are not just clicking but also performing action when click is performed.



回答9:

The error was caused by UI thread block. Please check your target Activity code, especially the setUp or init function.

I have met the same error, there is a wrong listener in UI thread which always be called. When I remove the listener, the error could be fixed.