我想在测试期间点击汉堡菜单打开导航抽屉。
目前,操作栏的层次结构如下:
... Toolbar (@id/action_bar) TextView (no-id) ImageButton (no-id) <-- this is the hamburger menu ... ...
使用Espresso只有withId
,withText
等的匹配器,这不符合我的目的。
答案 0 :(得分:1)
好的,结果使用自定义ViewMatcher
可以解决问题:
这里匹配器必须匹配一个父ID为action_bar
并且是ImageView的视图。
onView(childOf(withId(android.support.v7.appcompat.R.id.action_bar),
withClassName(is(ImageButton.class.getName()))))
.perform(click());
方法childOf
如下:
Matcher<View> childOf(Matcher<View> parentMatcher,
Matcher<View> childMatcher) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
// creation of description left as an exercise
}
@Override
protected boolean matchesSafely(View view) {
if (view.getParent() instanceof ViewGroup) {
ViewGroup parent = (ViewGroup) view.getParent();
return parentMatcher.matches(parent) && childMatcher
.matches(view);
}
return false;
}
};
}
该方法允许使用各种子ViewMatcher
,因此您可以在需要时使用自定义视图匹配器。
答案 1 :(得分:1)
您可以合并allOf
和withParent
来查明该视图:
onView(
allOf(
withClassName(is(ImageButton.class.getName())),
withParent(withId(android.support.v7.appcompat.R.id.action_bar)))
.perform(click());
更多信息:http://blog.sqisland.com/2015/05/espresso-match-toolbar-title.html