Android Espresso:当视图显示在屏幕上时如何执行操作?

时间:2019-06-20 08:42:59

标签: android automated-tests android-espresso

我想将仪器测试添加到我的Android应用中。

有一个登录屏幕,该屏幕首先执行对特定数据的加载,成功后将向用户显示身份验证。表单(用户名和密码)。

我想对EditText小部件执行操作,例如 typeText ,如下所示:

    @Test
    fun agnetlogin() {

        onView(withId(R.id.edt_login)).perform(typeText(loginToBeTyped), closeSoftKeyboard())
        onView(withId(R.id.edt_password)).perform(typeText(passwordToBeTyped), closeSoftKeyboard())

        onView(withId(R.id.btn_sign_in)).perform(click())
    }

但是我得到一个错误,即视图没有按层次结构退出,这是正常的,因为在数据充电时可见性被设置为消失。

2 个答案:

答案 0 :(得分:0)

@ J.M.J,这是检查视图是否显示在视图中的良好做法。它还可以避免错误,您可以按照以下示例检查视图是否显示。

onView(withId(R.id.my_view))
    .perform(click())
    .check(matches(isDisplayed()));

或者如果您知道该视图已经显示,则可以使用特定名称进行检查,例如

onView(withId(R.id.my_view))
    .check(matches(withText("Hello Espresso!")))
    .perform(click())
    .check(matches(isDisplayed()));

答案 1 :(得分:0)

您可以添加一个Idlingrecource管理器,该管理器将等到您的输入字段加载完毕,然后对其执行操作:

https://medium.com/azimolabs/wait-for-it-idlingresource-and-conditionwatcher-602055f32356

一种快速而肮脏的解决方案可能是在代码前面睡一会儿(例如5秒钟):

Thread.sleep(5000);

onView(withId(R.id.my_view))
.perform(click())
.check(matches(isDisplayed()));