我运行android espresso测试时遇到错误:
com.google.android.apps.common.testing.ui.espresso.PerformException:在视图'上执行'单击'时出错,ID为:< 2131034173>'。
我的代码很简单:
onView(withId(R.id.btn)).perform(click());
但是这段代码没有错误:
onView(withId(R.id.btn)).check(matches(isDisplayed()));
我无法找到原因。
答案 0 :(得分:74)
诀窍是读取错误的完整堆栈跟踪。在中间,有一些重要的信息,如:
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}"
详细解释了错误。
答案 1 :(得分:28)
尝试确保未显示软键盘。可以使用 closeSoftKeyboard ViewAction轻松关闭它。
此外,请确保禁用系统动画。在设置下 - > 开发选项会关闭以下内容:
此外,这可能是由其他应用程序的ANR对话框引起的。
报告here也是一个问题。
答案 2 :(得分:21)
我遇到了同样的问题,因为软键盘与元素重叠。我使用scrollTo()后跟click()来解决问题。
onView(withId(R.id.btn))
.perform(scrollTo())
.perform(click());
如果上述方法无效,请先尝试添加以下内容:
onView(withId(R.id.myEditText)).perform(closeSoftKeyboard());
答案 3 :(得分:6)
即使使用,我也遇到了问题
onView(withId(R.id.myEditText)).perform(closeSoftKeyboard());
我发现,在我的情况下,在某些设备上,我使用的 每次
onView(withId(R.id.myEditText)).perform(TypeTextAction());
就像系统在另一个键盘上堆叠了一个新键盘一样,所以解决了我问题的是总是使用 closeSoftKeyboard() 每一次< / strong>我像这样使用TypeTextAction。
onView(withId(R.id.myEditText)).perform(typeTextAction(), closeSoftKeyboard());
因此,如果我需要编辑表单,它将像:
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());
答案 4 :(得分:4)
如果在测试过程中看不到视图...请使用perform(scrollTo())
...它会滚动并点击操作。
示例: -
onView(withId(R.id.btn)).perform(scrollTo()).perform(click());
答案 5 :(得分:3)
我有同样的问题,但原因是:
Caused by: android.support.test.espresso.AppNotIdleException: Looped for 3713 iterations over 60 SECONDS. The following Idle Conditions failed .
我不知道问题出在哪里,因为它点击了转到下一个活动的按钮,但看起来它仍在研究
之后的按钮答案 6 :(得分:0)
我有同样的问题,并通过改变元素的位置来解决它。
我试图点击的位置上没有元素。试图点击位置3,但元素位于第2位(完全忘记索引从0开始) 所以,我改变了元素的位置,现在它完美地工作了
答案 7 :(得分:0)
发生这种情况的原因很少。以我为例,这是因为单击按钮后,progress bar
一直持续旋转,因此请确保是否有网络呼叫或某些等待过程,在收到回调后停止进度栏。
另外,执行点击操作还需要等待某些操作,因此请确保您不仅单击,而且还要在执行点击操作时执行操作。
答案 8 :(得分:0)
TestCase中的一种可能性是,如果您使用LiveData执行数据库操作,则应避免在Rule之下使用。
@规则 public InstantTaskExecutorRule InstantTaskExecutorRule = new InstantTaskExecutorRule();
删除这些Line TestCase之后,可以正常工作。
答案 9 :(得分:0)
对我来说,就像埃里克·艾亚(Eric Aya)所说的那样。但是我并没有每次都需要关闭键盘,因为我要输入数字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());
答案 10 :(得分:0)
使用编辑文本执行 typeText 后,关闭软键盘,因为它可能会覆盖您的视图
来自closeSoftKeyboard()
完整代码如下:
onView(withId(R.id.fab)).perform(click())
onView(withId(R.id.edReminder)).perform(typeText("TestAA"))
closeSoftKeyboard()
onView(withId(R.id.btnAdd)).perform(click())
注意:使用 closeSoftKeyboard()
和 perform()
不允许作为 perform()
接受 ViewAction 和 closeSoftKeyboard()
返回 Unit
将 ViewActions.closeSoftKeyboard()
与 perform()
一起使用。
答案 11 :(得分:-3)
error
是由UI
线程阻塞造成的。请检查您的target Activity code
,尤其是setUp
或init
功能。
我遇到了同样的error
,UI线程中有一个错误的listener
,总是被调用。当我删除listener
时,error
可以修复。