我正在尝试测试是否缺少UI视图。视图选择器如下:
public static ViewInteraction onMyTestUi() {
return onView(withId(R.id.myTestId));
}
选择器可以很好地检查视图是否显示,但在检查视图是否未显示时会出错。我使用如下:
onMyTestUi().check(matches(not(isDisplayed())));
但我得到以下错误:
com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException:层次结构中找不到与id为is的匹配的视图If目标视图不是视图层次结构的一部分,您可能需要使用Espresso.onData,从以下其中一个加载AdapterViews:android.widget.ListView{…}
这很奇怪。我正在检查是否缺少UI,预计找不到此视图。那为什么浓缩咖啡会出错呢?请说明这里可能出了什么问题。
需要使用doesNotExist()
。在这里找到。
如果视图在视图层次结构中,但处于不可见状态(可见性设置为"invisible"),请使用not(isDisplayed)
。但是,如果视图层次结构中根本不存在该视图(例如,可见性设置为"GONE"),则使用doesNotExist()
。
也可以使用您的方法,但类似于以下内容:
onView(withId(R.id.next)).check(matches(not(isDisplayed())));
onView(withText("")).check(doesNotExist());
如果检查视图可见性,可以尝试此选项"具有有效可见性";
onView(withId(R.id.YOURVIEW)).check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
如果要检查View
是否不可见或是否不存在。
public static ViewAssertion isNotDisplayed() {
return new ViewAssertion() {
@Override
public void check(View view, NoMatchingViewException noView) {
if (view != null && isDisplayed().matches(view)) {
throw new AssertionError("View is present in the hierarchy and Displayed: "
+ HumanReadables.describe(view));
}
}
};
}
用法:
onView(withId(R.id.someView)).check(isNotDisplayed());