Android Epresso:DatePicker单击确定添加一年而不是验证

时间:2015-06-02 13:35:05

标签: android datepicker android-espresso

在Google Espresso测试中,我试图点击DatePickerDialog的“确定”按钮。

但不是验证我的输入,而是只添加一年而不关闭对话框。

似乎点击是在" +"年份栏的按钮。这是一个Espresso错误还是我错过了什么?

这是我的Espresso代码(在Kotlin中):

onView(allOf(iz(instanceOf(javaClass<Button>())), withText("OK"),
            isDisplayed()) as Matcher<View>).perform(click())

4 个答案:

答案 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())
  1. 通过使用android.R.string.ok,您可以覆盖"ok"文本的所有可能版本,而与当前的语言环境和Android版本无关。甚至在需要"ok"文本时,Android Studio甚至建议(掉毛警告)。
  2. 由于anyOf,您可以添加多个ViewMatcher,以确保可以涵盖所有已知的可能性。因此,如果您遇到一种访问“确定”按钮的新方法,只需将其添加到anyOf中即可。
  3. 最后,我敢打赌,添加.inRoot(isDialog())支票是确保您定位Dialog的好方法。如果DatePickerDialog不在屏幕上,则肯定会失败!而且有充分的理由。