如何在带有espresso测试的按钮中向下滚动并执行单击?

时间:2017-01-10 10:52:49

标签: android unit-testing testing android-espresso

我有这个应用程序,我正在测试我需要登录的地方,然后它转到另一个活动,然后它转到另一个我可以注销的活动。问题是我的注销按钮位于ScrollView的底部,并且在屏幕上看不到,espresso找不到该按钮。我需要先滚动,然后单击按钮。你能告诉我如何滚动然后点击按钮吗?

@Before
    public void init() {
        // Specify a valid string.
        loginText = "something";
        passwordText = "something";
    }

    @Test
    public void loginAction() {

        mBrowserActivityMonitor = getInstrumentation().addMonitor(MainActivity.class.getName(), null, false);

        // Type text and then press the button.
        onView(withId(R.id.editText_username))
                .perform(typeText(loginText), closeSoftKeyboard());
        onView(withId(R.id.editText_password))
                .perform(typeText(passwordText), closeSoftKeyboard());
        onView(withId(R.id.button_login)).perform(click());

        Activity activity = mBrowserActivityMonitor.waitForActivityWithTimeout(10000);

        onView(withId(R.id.button_left)).perform(click());

        Activity activity2 = mBrowserActivityMonitor.waitForActivityWithTimeout(10000);


        onView(withId(R.id.button_logout)).perform(click()); **//does not recognize**

        Activity activity3 = mBrowserActivityMonitor.waitForActivityWithTimeout(10000);
        assertNotNull(activity3); //To see if activity 2 (Profile) is opened

这是错误日志:

  

引起:java.lang.RuntimeException:不会执行操作   因为目标视图与以下一个或多个不匹配   限制:       至少90%的视图区域会显示给用户。

1 个答案:

答案 0 :(得分:3)

onView(withId(R.id.button_logout)).perform(scrollTo(), click());

如果您正在使用的视图位于ScrollView(垂直或水平)内,请考虑需要使用scrollTo()显示视图的前面操作(如click()和typeText())。这可确保在继续执行其他操作之前显示视图:

onView(...)。perform(scrollTo(),click());

注意:如果视图已经显示,则scrollTo()将无效,因此您可以在显示视图时由于屏幕尺寸较大而安全地使用它(例如,当您的测试在较小和较大的屏幕上运行时分辨率)。

您可以查看他们的文档:https://google.github.io/android-testing-support-library/docs/espresso/basics/index.html#performing-an-action-on-a-view