检查 Android Espresso 框架中的 DatePicker 日历值

Check DatePicker calendar value in Android Espresso framework

我有一个 activity,带有两个 DatePicker 控件和一些文本输入和按钮。我想用浓缩咖啡测试一些场景:

  1. 将日期设置为第一个 DatePicker
  2. 设置一些文本并单击按钮 触发我的业务逻辑并将日期设置为秒 DatePicker
  3. 检查第二个日期 DatePicker

在第 3 步中,我想做类似 onView(withId(R.id.end_date_picker)).check(matches(withText("25-01-2017"))); 的事情。我可以用什么代替 withText 来检查 DatePicker Calendar/Date 值?感谢您的帮助。

要实现你想要的,你需要两件事:

要为日期选择器设置日期,最好的方法是使用 espresso PickerActions,我写过关于它们的文章 here and ,但将从那里复制我的部分答案:

最简单的方法是使用PickerActions.setDate方法:

onView(withId(R.id.start_date_picker)).perform(PickerActions.setDate(2017, 6, 30));

要使其正常工作,您必须在 gradle 文件中添加 com.android.support.test.espresso:espresso-contrib 库,并且可能会排除一些库,如果您遇到问题,请查看我上面的链接答案。

对于第二部分,要检查 DatePicker 的日期,我认为您必须使用自定义匹配器。

您可以将此方法添加到您的代码中:

public static Matcher<View> matchesDate(final int year, final int month, final int day) {
    return new BoundedMatcher<View, DatePicker>(DatePicker.class) {

        @Override
        public void describeTo(Description description) {
            description.appendText("matches date:");
        }

        @Override
        protected boolean matchesSafely(DatePicker item) {
            return (year == item.getYear() && month == item.getMonth() && day == item.getDayOfMonth());
        }
    };
}

然后您可以使用它来检查这样的日期:

onView(withId(R.id.end_date_picker)).check(matches(matchesDate(2017, 6, 30)));