如何在Android Espresso中检查/测试Snackbar的消失

3

我想测试Espresso是否知道如何检查Snackbar的消失?我目前正在删除一个标签,并显示Snackbar,给用户撤消的机会。我在Snackbar.LEGNTH_LONG之后删除标签,我想测试Snackbar.LEGNTH_LONG后我的标签是否仍然在列表中。

我还没有弄清楚这一点。在Espresso上是否有可能实现?

1个回答

2
您可以将此类添加到您的项目中:https://android.googlesource.com/platform/frameworks/support/+/a1de3ee/design/tests/src/android/support/design/testutils/SnackbarUtils.java 这是一个工具类,其中包含以下方法:
/**
 * Helper method that dismissed that specified {@link Snackbar} and waits until
 * it has been fully dismissed. Note that calling this method will reset the currently
 * set {@link Snackbar.Callback}.
 */
public static void dismissSnackbarAndWaitUntilFullyDismissed(Snackbar snackbar) {
    SnackbarDismissedCallback snackbarCallback = new SnackbarDismissedCallback();
    snackbar.setCallback(snackbarCallback);
    try {
        // Register our listener as idling resource so that Espresso waits until the
        // the snackbar has been fully dismissed
        Espresso.registerIdlingResources(snackbarCallback);
        // Dismiss the snackbar
        snackbar.dismiss();
        // Mark the callback to require waiting for idle state
        snackbarCallback.mNeedsIdle = true;
        // Perform a dummy Espresso action that loops until the UI thread is idle. This
        // effectively blocks us until the Snackbar has completed its sliding animation.
        onView(isRoot()).perform(waitUntilIdle());
        snackbarCallback.mNeedsIdle = false;
    } finally {
        // Unregister our idling resource
        Espresso.unregisterIdlingResources(snackbarCallback);
        // And remove our tracker listener from Snackbar
        snackbar.setCallback(null);
    }
}

然后执行:

SnackbarUtils.dismissSnackbarAndWaitUntilFullyDismissed(snackbar);

在检查标签是否仍在列表中之前,请先进行测试。我没有测试过,但我认为这应该可以工作。

链接已经失效了 :-( 找不到新的链接。 - Nicolas Bossard
@NicolasBossard 我已更新链接并复制了相关代码,请查看。 - jeprubio
1
snackbar.setCallback(callback)已被弃用。请改用snackbar.addCallback。这样,任何现有的回调都不会被删除。 - Maalevolent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接