0

我有一个 AndroidJUnit4 测试用例,在这个测试用例中,我使用以下代码来验证小吃栏是否显示并包含正确的文本:

onView(withId(android.support.design.R.id.snackbar_text)).check(matches(isDisplayed()));
onView(allOf(withId(android.support.design.R.id.snackbar_text), withText(R.string.msg_error_unknown_user)))
                    .check(matches(isDisplayed()));

当我在 API 级别 22 的模拟器/设备上运行此测试时,测试运行正确。当我切换到 API 级别 17 时,测试失败并出现以下异常:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: com.mydomain.myappname:id/snackbar_text

请注意,应用程序在两个 API 级别上的行为方式相同;小吃吧正在正确显示。

为什么在我的测试用例中没有在 API 级别 17 上检索到快餐栏,我该如何解决这个问题?

4

1 回答 1

0

好吧,Espresso正在查看您的xml文件并搜索snackbar_text,但它找不到它,因为它有 android 系统 ID,Espresso没有访问权限。如果您仍然想检查它,请了解另一个名为uiautomator.

在这里你会发现它是如何工作的:http Espresso: //qathread.blogspot.com/2015/05/espresso-uiautomator-perfect-tandem.html

另外请花点时间看看我已经Snackbar在下面的代码中进行了测试:

@Test
public void checkIfSnackBarIsProperlyDisplayed() throws InterruptedException {
        onView(withId(R.id.fab)).perform(click());
        onView(withText(R.string.function_not_available)).check(matches(isDisplayed()));

    }

    @Test
    public void clickOnFloatingActionButtonToShowSnackBar() {
        onView(withId(R.id.fab)).perform(click());
        onView(withId(R.id.snackbar_text))
                .check(matches(withText(R.string.function_not_available)));

    }

    @Test
    public void swipeRightToDismissDisplayedCommunique() {
        onView(withId(R.id.fab)).perform(click());
        onView(withId(R.id.snackbar_text))
                .perform(swipeRight())
                .check(matches(not(isCompletelyDisplayed())));

    }
}

希望你觉得它有用。

于 2016-01-16T19:13:20.597 回答