所以我有一个具有此视图层次结构的布局:
<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();
但没有一个关闭对话框。
有趣的是,测试失败不是因为单击本身失败,而是因为它无法从下一行找到视图(被对话框隐藏)。
答案 0 :(得分:0)
如果对话框显示在需要由Espresso查找的视图上,这是测试失败的常见行为。
我建议您使用 UiAutomatorViewer ,可以在
{AndroidSdkPath}\tools\bin\
。使用此工具,获取对话框的屏幕快照(手动触发)并检索按钮的ID(有时对话框的按钮ID可能与android.R.id.button1
不同)。
将此值与方法onView(withId(retrievedId)).perform(click());
一起使用。
在仪器测试中,应始终将id值用作视图的选择器,因为视图的文本可能取决于设备/仿真器的本地化。