我想做的是检查特定的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的第一次检查失败,则不执行第二行。您只需要确保您的第一个条件得到正确评估即可。

但一般来说,这是bad pattern。有一个原因为什么不使用某种黑客手段就不可能做到这一点。您应该完全避免测试中出现条件!最好有两个单独的测试用例,在其中一个测试用例中出现对话框,然后继续进行测试;在第二个测试用例中不出现对话框,然后从那里继续。

07-25 22:20