如何使用Espresso检查对话片段是否可见,然后才执行操作



我想做的是检查特定DialogFragment是否可见,并且只有当它可见时,我才想执行这样的代码onView(withId(R.id.start_app)).perform(click());

现在我有这个代码,我不能在 if 条件下使用。无论Dialogfragment是否可见,此方法中的两个代码都将运行。

@Test
public void testHowDoIBecomeCustomerButtonX() {
    onView(withId(R.id.cancel_button))
            .inRoot(isDialog())
            .check(matches(isDisplayed()));
    onView(withId(R.id.becoming_customer)).perform(click());
}

您可以做的是将您的条件包装到一个try-catch中,如果不满足条件,则抛出异常,因此离开try块。

它可能看起来像这样:

    try {
        onView(withId(R.id.cancel_button)).check(matches(isDisplayed()));
        onView(withId(R.id.becoming_customer)).perform(click());
    } catch (NoMatchingViewException e) {
    }

如果cancel_button的第一个检查失败,则不会执行第二行。您只需要确保您的第一个条件评估正确即可。

但总的来说,这是一个不好的模式。如果不使用某种黑客,这是不可能实现的,这是有原因的。您应该完全避免测试中的条件!最好有两个单独的测试用例,在一个测试用例中出现对话框,然后您继续测试,而在第二个测试用例中,它没有出现,然后从那里继续。

最新更新