matches(not(isDisplayed()))失败,出现NoMatchingViewException



我正在尝试测试是否缺少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());

相关内容

  • 没有找到相关文章

最新更新