我正在为导航抽屉编写Espresso测试,导航抽屉有一个长而动态的条目列表。我想通过Text匹配navDrawer菜单项而不是位置编号。看看谷歌的DataAdapterSample,我希望我能用它来获得一场比赛:
@Test
public void myTest() {
openDrawer();
onRow("Sign In").check(matches(isCompletelyDisplayed()));
}
private static DataInteraction onRow(String str) {
return onData(hasEntry(equalTo("module_name"), is(str)));
}
我没有得到一场比赛。但在日志中我可以看到我在寻找什么。我得到了
No data found matching: map containing ["module_name"->is "Sign In"]
contained values: <[
Data: Row 0: {_id:"0", module_name:"Applications", module_secure:"false", headerCollapsible:1, } (class: android.database.MatrixCursor) token: 0,
Data: Row 1: {_id:"1", module_name:"Sign In", module_lock:"false", module_right_text:null, } (class: android.database.MatrixCursor) token: 1,
...
答案 0 :(得分:1)
我认为hasEntry()仅适用于地图,在我看来,导航抽屉中的项目不是地图,而是MatrixCursors。
只需将示例中的Person类替换为MatrixCursor类。
例如:
private static DataInteraction onRow(final String str) {
return onData(new BoundedMatcher<Object, MatrixCursor>(MatrixCursor.class) {
@Override
public void describeTo(Description description) {
description.appendText("Matching to MatrixCursor");
}
@Override
protected boolean matchesSafely(MatrixCursor cursor) {
return str.equals(cursor.getString(1));
}
});
}
这里我假设游标的第二列包含我们需要匹配的文本。我假设这是基于&#34;没有找到匹配的数据..&#34;错误信息。