PerformException: Error performing 'single click'

AndroidAndroid Espresso

Android Problem Overview


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.

Android Solutions


Solution 1 - Android

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.

Solution 2 - Android

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.

Solution 3 - Android

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

Solution 4 - Android

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

Solution 5 - Android

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

Solution 6 - Android

after you perform typeText with edit text, close the soft keyboard as it may cover your view

by closeSoftKeyboard()

so full code be:

    onView(withId(R.id.fab)).perform(click())
    onView(withId(R.id.edReminder)).perform(typeText("TestAA"))
    closeSoftKeyboard()
    onView(withId(R.id.btnAdd)).perform(click())

NOTE: using closeSoftKeyboard() with perform() not permitted as perform() accept ViewAction and closeSoftKeyboard() return Unit use ViewActions.closeSoftKeyboard() with perform().

Solution 7 - Android

One Possibility in your TestCase is that if you perform database operations using LiveData so you should avoid use below Rule.

@Rule public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();

After Removing these Line TestCase work Perfectly.

Solution 8 - Android

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

Solution 9 - Android

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.

Solution 10 - Android

For me it was like Eric Aya said. But I didn't close de keyboard everytime, just before and after I needed to "change the keyboard" because I was typing a number Edittext.

    //Type the user data
    onView(withId(R.id.edit_name)).perform(typeText(name));
    onView(withId(R.id.edit_lastname)).perform(typeText(lastname));
    onView(withId(R.id.edit_email2)).perform(typeText(email));
    onView(withId(R.id.edit_password2)).perform(typeText(password), closeSoftKeyboard());

    //if its a number edittext we have to use String.valueOf
    //also we need to closesoftkeyboard before and after, so it changes from text 
    //to number
    onView(withId(R.id.edit_age)).perform(typeText(String.valueOf(age)), 
    closeSoftKeyboard());
    onView(withId(R.id.edit_is_admin)).perform(typeText(admin), closeSoftKeyboard());

Solution 11 - Android

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWinton HouView Question on Stackoverflow
Solution 1 - AndroidAlexander PachaView Answer on Stackoverflow
Solution 2 - AndroidappollView Answer on Stackoverflow
Solution 3 - AndroidPrabin TimsinaView Answer on Stackoverflow
Solution 4 - AndroidArthur Sady Cordeiro RossettiView Answer on Stackoverflow
Solution 5 - AndroidKrishnaView Answer on Stackoverflow
Solution 6 - AndroidMahmoud MabrokView Answer on Stackoverflow
Solution 7 - AndroidPinak GauswamiView Answer on Stackoverflow
Solution 8 - Androidjyo coolView Answer on Stackoverflow
Solution 9 - AndroidVilenView Answer on Stackoverflow
Solution 10 - AndroidLídia RedondoView Answer on Stackoverflow
Solution 11 - AndroidChen LixingView Answer on Stackoverflow