意式浓缩咖啡 - 如何检查是否显示其中一个视图

在我的测试中,在一个操作之后,可以出现两个可能的视图,并且它们都是正确的。如何检查是否显示其中一个视图。对于我可以检查的单个视图是Displayed()。但是,如果其他视图可见,这将失败。如果显示这两个视图中的任何一个,我想通过测试。

onMyButton.perform(click());

onMyPageOne.check(matches(isDisplayed())); //view 1
or
onMyPageTwo.check(matches(isDisplayed())); //view 2

之后,单击MyButton,任何一个视图(1或2)都应该出现,但不是两者兼而有之。它不是固定的,将显示哪一个。如何检查是否显示其中任何一个?


答案 1

可以像这样捕获Espresso提出的异常:

如果要测试视图是否在层次结构中:

try {
    onView(withText("Button")).perform(click());
    // View is in hierarchy

} catch (NoMatchingViewException e) {
    // View is not in hierarchy
}

如果视图不在层次结构中,则将引发此异常。

有时视图可以在层次结构中,但我们需要测试它是否显示,因此断言还有另一个例外,如下所示:

try {
    onView(withText("Button")).check(matches(isDisplayed()));
    // View is displayed
} catch (AssertionFailedError e) {
    // View not displayed
}

答案 2

这里有两种情况,你可以尝试覆盖。第一种是,如果您正在检查视图是否“显示在屏幕上给用户”,在这种情况下,您将使用isDisplayed()

onView(matcher).check(matches(isDisplayed()));

或否定

onView(matcher).check(matches(not(isDisplayed())));

另一种情况是,如果您正在检查视图是否可见但不一定显示在屏幕上(即滚动视图中的项目)。为此,您可以使用withEffectiveVisibility(Visibility)

onView(matcher).check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)));

推荐