PerformException: Error performing 'single click'

大城市里の小女人 提交于 2019-12-20 10:22:04

问题


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




回答7:


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.




回答8:


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.




回答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.



来源:https://stackoverflow.com/questions/29786413/performexception-error-performing-single-click

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!