浓咖啡:在ScrollView上方的对话框上单击按钮不起作用

时间:2019-12-06 09:39:55

标签: android android-espresso

所以我有一个具有此视图层次结构的布局:

<androidx.constraintlayout.widget.ConstraintLayout ... >
  <TableLayout ... >
    ...
  </TableLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

在此布局上,我显示了自定义DialogFragment。在Espresso测试中,我已经像这样关闭了它:

onView(withText("Save")).perform(scrollTo(), click());

我更改了布局,在ScrollView周围添加了TableLayout。现在看起来更像这样:

<androidx.constraintlayout.widget.ConstraintLayout ... >
  <ScrollView ...>
    <TableLayout ... >
      ...
    </TableLayout>
  </ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

这是commit

并且 Espresso行不再关闭对话框

我尝试了其他几种关闭方式,例如

onView(withId(android.R.id.button1)).perform(click());

onView(withText("Save"))
            .inRoot(isDialog())
            .check(matches(isDisplayed()))
            .perform(click());

UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
uiDevice.findObject((new UiSelector().text("Save"))).click();

但没有一个关闭对话框。

有趣的是,测试失败不是因为单击本身失败,而是因为它无法从下一行找到视图(被对话框隐藏)。

1 个答案:

答案 0 :(得分:0)

如果对话框显示在需要由Espresso查找的视图上,这是测试失败的常见行为。 我建议您使用 UiAutomatorViewer ,可以在 {AndroidSdkPath}\tools\bin\。使用此工具,获取对话框的屏幕快照(手动触发)并检索按钮的ID(有时对话框的按钮ID可能与android.R.id.button1不同)。

将此值与方法onView(withId(retrievedId)).perform(click());一起使用。

在仪器测试中,应始终将id值用作视图的选择器,因为视图的文本可能取决于设备/仿真器的本地化。