Android Epresso:DatePicker 单击确定添加年份而不是验证
Android Epresso: DatePicker Click on OK add a year instead of validate
在 Google Espresso 测试中,我尝试单击 DatePickerDialog 的“确定”按钮。
但是它没有验证我的输入,只是增加了一年并且没有关闭对话框。
似乎是点击了年份栏的“+”按钮。这是 Espresso 错误还是我遗漏了什么?
这是我的 Espresso 代码(在 Kotlin 中):
onView(allOf(iz(instanceOf(javaClass<Button>())), withText("OK"),
isDisplayed()) as Matcher<View>).perform(click())
它可能并不完美(因为我对文本进行了硬编码 "OK"),但我在测试中使用以下代码段设法做到了:
// Change the date of the DatePicker. Don't use "withId" as at runtime Android shares the DatePicker id between several sub-elements
onView(withClassName(Matchers.equalTo(DatePicker.class.getName()))).perform(PickerActions.setDate(1989, 8, 25));
// Click on the "OK" button to confirm and close the dialog
onView(withText("OK")).perform(click());
在某些版本的 Android 中,DatePickerDialog 上的 "OK" 被替换为 "Set" 或 "Done"。
尝试:
onView(withId(android.R.id.button1)).perform(click());
这将点击对话框的肯定按钮。不管怎么称呼。
将我的测试设备升级到 4.4.4 后,错误自行消失:这是一个 Android < 4.4 错误 T_T
对于那些点击 OK
按钮有问题的人,我建议使用以下代码:
onView(
anyOf(
withText(android.R.string.ok),
withId(android.R.id.button1)
)
)
.inRoot(isDialog())
.perform(click())
- 通过使用
android.R.string.ok
,您可以覆盖 "ok"
文本的所有可能版本,而不管当前的 Locale 和 Android 版本。当需要 "ok"
文本时,Android Studio 甚至推荐(lint 警告)。
- 感谢
anyOf
,您可以添加多个 ViewMatcher
以确保您可以涵盖所有已知的可能性。所以如果你偶然发现了一种访问“确定按钮”的新方法,你可以将它添加到 anyOf
.
- 最后,我敢打赌添加
.inRoot(isDialog())
检查是确保您瞄准 Dialog
的好方法。如果 DatePickerDialog
不是 on-screen,这肯定会失败!并且有充分的理由。
在 Google Espresso 测试中,我尝试单击 DatePickerDialog 的“确定”按钮。
但是它没有验证我的输入,只是增加了一年并且没有关闭对话框。
似乎是点击了年份栏的“+”按钮。这是 Espresso 错误还是我遗漏了什么?
这是我的 Espresso 代码(在 Kotlin 中):
onView(allOf(iz(instanceOf(javaClass<Button>())), withText("OK"),
isDisplayed()) as Matcher<View>).perform(click())
它可能并不完美(因为我对文本进行了硬编码 "OK"),但我在测试中使用以下代码段设法做到了:
// Change the date of the DatePicker. Don't use "withId" as at runtime Android shares the DatePicker id between several sub-elements
onView(withClassName(Matchers.equalTo(DatePicker.class.getName()))).perform(PickerActions.setDate(1989, 8, 25));
// Click on the "OK" button to confirm and close the dialog
onView(withText("OK")).perform(click());
在某些版本的 Android 中,DatePickerDialog 上的 "OK" 被替换为 "Set" 或 "Done"。 尝试:
onView(withId(android.R.id.button1)).perform(click());
这将点击对话框的肯定按钮。不管怎么称呼。
将我的测试设备升级到 4.4.4 后,错误自行消失:这是一个 Android < 4.4 错误 T_T
对于那些点击 OK
按钮有问题的人,我建议使用以下代码:
onView(
anyOf(
withText(android.R.string.ok),
withId(android.R.id.button1)
)
)
.inRoot(isDialog())
.perform(click())
- 通过使用
android.R.string.ok
,您可以覆盖"ok"
文本的所有可能版本,而不管当前的 Locale 和 Android 版本。当需要"ok"
文本时,Android Studio 甚至推荐(lint 警告)。 - 感谢
anyOf
,您可以添加多个ViewMatcher
以确保您可以涵盖所有已知的可能性。所以如果你偶然发现了一种访问“确定按钮”的新方法,你可以将它添加到anyOf
. - 最后,我敢打赌添加
.inRoot(isDialog())
检查是确保您瞄准Dialog
的好方法。如果DatePickerDialog
不是 on-screen,这肯定会失败!并且有充分的理由。