使用DatePicker录制Espresso测试

4

测试记录器会在录制后运行时立即失败。

原因是,在录制过程中,我点击了年份,年份选择器弹出,我向后滚动并选择了其中的一年。录制器没有捕捉到滚动操作。

在Xcode中,他们添加了一个方法来滚动到该项。我在Espresso中没有找到类似的东西。

(使用Android Studio 2.3。)

2个回答

14

我已经很长一段时间没有使用录音机了,改为手写我的测试。

我使用以下行来设置DatePicker中的日期:

onView(withClassName(Matchers.equalTo(DatePicker.class.getName()))).perform(PickerActions.setDate(year, monthOfYear, dayOfMonth));

PickerActions类定义在espresso-contrib库中。将其添加到您的gradle文件中,如下所示:

androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.4.0'

然后我将其用于辅助方法中,该方法点击打开一个DatePickerDialog的按钮,设置日期并通过单击“确认”按钮来确认:

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

等等,PickerActions是什么?应该是TestHelper吗? - Rob
抱歉,我的错。那是一个额外的库来处理选择器。我已经更新了我的答案。 - stamanuel
好的,谢谢。哇,录制器太没用了...痛苦...会尝试这个,但是做一件本应简单的事情却要花费如此之多的麻烦... :( - Rob
是的,我大约一年前尝试过录制器,并决定它是一个不错的小玩意儿,但还没有准备好进行真正的使用。我希望它在此期间得到了改进,但从你的回复中我猜想它仍然没有太大的改善。总的来说,我很满意手动编写我的测试,我认为这样可以使它们更加清晰(而且我知道它们要做什么和不做什么)。 - stamanuel
你的排除操作没有生效,但是这个问题已经被解决了:https://dev59.com/NFoU5IYBdhLWcg3wlHsg#37484833。谢谢。其他方面都可以正常工作。尽管分页不起作用(我为此提出了另一个问题)。 - Rob
显示剩余2条评论

2
注意:本答案旨在补充@stamanuel的答案。
要查看Android源代码中打开DatePickerDialog并选择日期的Android仪器化测试示例,请参考PickerActionsTest.java文件。
该文件中的两行关键代码如下:
// Sets a date on the date picker widget
onView(isAssignableFrom(DatePicker.class)).perform(setDate(1980, 10, 30));

// Confirm the selected date. This example uses a standard DatePickerDialog
// which uses
// android.R.id.button1 for the positive button id.
onView(withId(android.R.id.button1)).perform(click());

正如@stamanuel在他的答案中提到的那样,PickerActions.setDate(year:monthOfYear:dayOfMonth:) 方法定义在 androidx.test.espresso:espresso-contrib 库中。

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