在Android Espresso中从日历中选择日期

在Android Espresso中从日历中选择日期,android,android-espresso,Android,Android Espresso,我正在用浓缩咖啡测试Android应用程序。我有一个EditText小部件,带有androidiputtype=date。当我用手指触摸这个控件时,会弹出一个日历供我选择日期 如何在浓缩咖啡中实现自动化?我找遍了所有的地方,我都找不出来typeText()当然不起作用。我在这里回答了原文,但在另一个问题的范围内:-因此我从那里重新发布了我的改编答案: 使用此行设置日期选择器中的日期: onView(withClassName(Matchers.equalTo(DatePicker.class.g

我正在用浓缩咖啡测试Android应用程序。我有一个
EditText
小部件,带有
androidiputtype=date
。当我用手指触摸这个控件时,会弹出一个日历供我选择日期


如何在浓缩咖啡中实现自动化?我找遍了所有的地方,我都找不出来
typeText()
当然不起作用。

我在这里回答了原文,但在另一个问题的范围内:-因此我从那里重新发布了我的改编答案:

使用此行设置日期选择器中的日期:

onView(withClassName(Matchers.equalTo(DatePicker.class.getName()))).perform(PickerActions.setDate(year, monthOfYear, dayOfMonth));
这使用了浓缩咖啡支持库的
espresso contrib
中的
PickerActions
。要使用它,请像这样将其添加到gradle文件中(您需要几个排除项以防止由于支持库版本不匹配而导致的编译错误):

然后,您可以创建一个助手方法,该方法单击打开日期选择器的视图,设置日期并通过单击“确定”按钮确认:

public static void setDate(int datePickerLaunchViewId, int year, int monthOfYear, int dayOfMonth) {
    onView(withParent(withId(buttonContainer)), withId(datePickerLaunchViewId)).perform(click());
    onView(withClassName(Matchers.equalTo(DatePicker.class.getName()))).perform(PickerActions.setDate(year, monthOfYear, dayOfMonth));
    onView(withId(android.R.id.button1)).perform(click());
}
然后在测试中使用它:

TestHelper.setDate(R.id.date_button, 2017, 1, 1); 
//TestHelper is my helper class that contains the helper method above

您可以显示ID及其数据类型吗。您需要单击的日历id。刚才看到我下面的答案似乎也有助于其他人。如果它解决了你的问题,如果你能接受它作为一个正确的答案,那就太好了。我不得不用“2.2”替换“2.2.2”以避免构建冲突。注意:
PickerActions.setDate
可以选择一个用户禁用的日期。为了使它工作,我必须使用
isAssignableFrom(DatePicker.class)
而不是使用类名称(Matchers.equalTo(DatePicker.class.getName())的
TestHelper.setDate(R.id.date_button, 2017, 1, 1); 
//TestHelper is my helper class that contains the helper method above