在Google Espresso测试中,我试图点击DatePickerDialog的“确定”按钮。
但不是验证我的输入,而是只添加一年而不关闭对话框。
似乎点击是在" +"年份栏的按钮。这是一个Espresso错误还是我错过了什么?
这是我的Espresso代码(在Kotlin中):
onView(allOf(iz(instanceOf(javaClass<Button>())), withText("OK"),
isDisplayed()) as Matcher<View>).perform(click())
答案 0 :(得分:6)
它可能并不完美(因为我将文本硬编码为“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());
答案 1 :(得分:3)
在某些版本的Android&#34; OK&#34;在DatePickerDialog上替换为&#34; Set&#34;或者&#34;完成&#34;。 尝试:
onView(withId(android.R.id.button1)).perform(click());
这将点击对话框的正面按钮。无论怎么称呼。
答案 2 :(得分:0)
将我的测试设备升级到4.4.4后,错误已经消失:它是Android&lt; 4.4错误T_T
答案 3 :(得分:0)
对于那些在点击OK
按钮时遇到问题的人,我建议使用以下代码:
onView(
anyOf(
withText(android.R.string.ok),
withId(android.R.id.button1)
)
)
.inRoot(isDialog())
.perform(click())
android.R.string.ok
,您可以覆盖"ok"
文本的所有可能版本,而与当前的语言环境和Android版本无关。甚至在需要"ok"
文本时,Android Studio甚至建议(掉毛警告)。anyOf
,您可以添加多个ViewMatcher
,以确保可以涵盖所有已知的可能性。因此,如果您遇到一种访问“确定”按钮的新方法,只需将其添加到anyOf
中即可。.inRoot(isDialog())
支票是确保您定位Dialog
的好方法。如果DatePickerDialog
不在屏幕上,则肯定会失败!而且有充分的理由。