Espresso:检查是否选择了NavigationDrawer列表项

时间:2015-08-21 07:55:44

标签: android navigation-drawer android-testing android-espresso

我有一个 if (this.Printer.ShowDialog() == true) { var b = this.Printer; } 的应用。我想测试是否在使用Espresso的NavigationDrawer列表中选择了正确的项目。

我找到了一种点击列表视图中有效的项目的方法。我使用相同的方法来测试列表项是否被选中。但这种行为很奇怪:对于第一次调用它似乎有效,但对于第二次调用它却没有。知道什么可能导致这种情况,或者我怎么能做得更好?

我试过了:

NavigationDrawer

我从第二次调用中得到的错误消息是:

// Open drawer.
openDrawer(DRAWER_LAYOUT_ID);

// We expect that the first item (map overview) is selected.
// Here it works fine. The check succeeds.
String mapOverviewTitle = mActivity.getString(R.string.map_overview);
onView(allOf(withId(R.id.title), hasSibling(withText(mapOverviewTitle))))
        .check(matches(isSelected()));

// Navigate to the login fragment. This works fine too.
openDrawer(DRAWER_LAYOUT_ID);
String loginTitle = mActivity.getString(R.string.login);
onView(allOf(withId(R.id.title), hasSibling(withText(loginTitle))))
        .perform(click());

// We expect that the login item is selected. 
openDrawer(DRAWER_LAYOUT_ID);
// This does not work. The check fails.
onView(allOf(withId(R.id.title), hasSibling(withText(loginTitle))))
        .check(matches(isSelected()));
closeDrawer(DRAWER_LAYOUT_ID);

3 个答案:

答案 0 :(得分:1)

看起来您需要构建自定义视图匹配器。您可以在此处查看inRoot()方法的示例,该方法可让您选择要与之交互的窗口图层。您的测试当前正在与最顶层的textView进行交互,您希望在此之前与层一级进行交互,并确保您的更改已启动。

https://code.google.com/p/android-test-kit/source/browse/testapp_test/src/main/java/com/google/android/apps/common/testing/ui/testapp/MultipleWindowTest.java

答案 1 :(得分:0)

为什么不通过onNavigationDrawerItemSelected(int position)方法执行代码,如下所示:

public void onNavigationDrawerItemSelected(int position) {
    Fragment frag = Dialer.newInstance("uselessParam1", "uselessParam2");
    switch (position){
        case 0:
            //code
            break;
        case 2:
            //code
            break;
        case 3:
            //code
            break;
    }
}

您只需看到哪个值与您想要的列表项匹配。

答案 2 :(得分:0)

就我而言,我这样做:

String fragmentTitle = mInstrumentation.getTargetContext().getString(TITLE_STRING_ID);
openDrawer(DRAWER_LAYOUT_ID);
onView(withText(fragmentTitle)).perform(click());
onView(withId(R.id.toolbar_title)).check(matches(withText(fragmentTitle)));

如果你的工具栏里面有textview toolbartitle,你可以这样检查一下。