可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.