所以我有一个具有此视图层次结构的布局:
<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();
但是他们都没有关闭对话框。
有趣的是,测试失败不是因为单击本身失败,而是因为它无法从下一行找到视图(被对话框隐藏)。
如果对话框显示在需要由Espresso查找的视图上,则测试失败是常见的行为。我建议使用UiAutomatorViewer
,该文件可以在{AndroidSdkPath}\tools\bin\
。使用此工具,获取对话框的屏幕快照(手动触发)并检索按钮的ID(有时对话框的按钮ID可能与android.R.id.button1
不同)。