Android 用浓缩咖啡测试Snackbar show

Android 用浓缩咖啡测试Snackbar show,android,integration-testing,android-testing,android-espresso,android-snackbar,Android,Integration Testing,Android Testing,Android Espresso,Android Snackbar,有没有一种方法可以用Espresso测试snackbar是否显示正确的文本 我有一个创建snackbar的简单调用 Snackbar.make(mView, "My text", Snackbar.LENGTH_LONG).show(); 我试过这个,运气不好 onView(withText("My text")).inRoot(withDecorView(not(is(mActivityRule.getActivity().getWindow().getDecorView())))).che

有没有一种方法可以用Espresso测试snackbar是否显示正确的文本

我有一个创建snackbar的简单调用

Snackbar.make(mView, "My text", Snackbar.LENGTH_LONG).show();
我试过这个,运气不好

onView(withText("My text")).inRoot(withDecorView(not(is(mActivityRule.getActivity().getWindow().getDecorView())))).check(matches(isDisplayed()));

这对我有用,请试试

onView(allOf(withId(android.support.design.R.id.snackbar_text), withText("My text")))
            .check(matches(isDisplayed()));
如果您使用AndroidX,请使用以下内容:

onView(withId(com.google.android.material.R.id.snackbar_text))
        .check(matches(withText(R.string.whatever_is_your_text)))
替代方案

private void checkSnackBarDisplayedByMessage(@StringRes int message){
onView(带文本(消息))
.检查(匹配(使用有效可见性(ViewMatchers.Visibility.Visibility));
}

我看到了前面的答案,但我认为这样会更好

@Test
public void onFabClick_shouldDisplaySnackbar() throws Exception {
  onView(withId(R.id.fab)).perform(click());

  // Compare with the text message of snackbar
  onView(withText(R.string.snackbar_message))
      .check(matches(isDisplayed()));
}

当espresso在snackbar的
Y
位置为
0.0
时进行检查时,您会怎么做
isDisplayed
引发异常。请确保在y位置为0.0时不添加此断言,这意味着snackbar已显示或尚未显示。您可能需要调整测试,以确保您要么等到它显示出来,要么根据您的需要提前检查scenario@ksarmalkar那么,我们应该如何等待呢?一种方法是添加您自己的匹配器,该匹配器每隔几毫秒轮询一次最大超时,这样它就不会无限期运行。我很确定还有很多其他的方法来解决这个问题。很少有人会想到,为snackbar Disclose添加一个侦听器,并在从未调用Disclose表示snackbar从未显示的情况下失败。我得到
NoMatchingViewException:在层次结构中找不到与此匹配的视图:id:com.my.package.debug:id/snackbar\u text
。有什么想法吗?很好,我认为可以用于所有通用文本使用,具有有效的可视性,而不是显示,因此它是否实际显示在当前屏幕上并不重要。我们从何处导入“withText”?@Phlip导入方式如下:导入android.support.test.espresso.matcher.ViewMatchers.withText