我有一个 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);
答案 0 :(得分:1)
看起来您需要构建自定义视图匹配器。您可以在此处查看inRoot()
方法的示例,该方法可让您选择要与之交互的窗口图层。您的测试当前正在与最顶层的textView进行交互,您希望在此之前与层一级进行交互,并确保您的更改已启动。
答案 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,你可以这样检查一下。