如何使用Espresso检查DialogFragment是否可见,然后才执行操作?

时间:2017-10-10 09:16:00

标签: android android-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());
}

1 个答案:

答案 0 :(得分:1)

您可以做的是将您的条件包装到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失败,则不执行第二行。您只需要确保您的第一个条件正确评估。

但一般来说这是一个bad pattern。如果不使用某种黑客,这是不可能的。您应该完全避免测试中的条件!最好有两个单独的测试用例,在一个测试用例中,对话框出现,继续进行测试,在第二个测试用例中,它不会出现,而是从那里开始。