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

问题描述 投票:74回答:6

我正在尝试测试是否缺少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目标视图不是视图层次结构的一部分,您可能需要使用Espresso.onData从以下之一加载它AdapterViews:android.widget.ListView {...}

这很奇怪。我正在检查缺少UI,并且期望不会找到此视图。那为什么Espresso会抛出错误?请在这里提出可能出了什么问题。

谢谢,惊讶!

android-espresso
6个回答
139
投票

需要使用doesNotExist()。找到here


15
投票

也可以使用您的方法,但是类似这样:

onView(withId(R.id.next)).check(matches(not(isDisplayed())));

12
投票
onView(withText("")).check(doesNotExist());

7
投票

如果要检查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());

1
投票

如果检查视图可见性“ withEffectiveVisibility”,则可以尝试此选项

    onViewWithId(R.id.YOURVIEW).check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))

0
投票

Sithu的建议对我来说很好。如果视图刚刚消失或不可见,则didNotExist()不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.