1

自 AndroidX 发布以来,我们在单元测试中使用 Robolectric 和 Espresso。但是我们无法找到测试对话的方法。Espresso 社区建议我们这样做:

onView(withId(android.R.id.button1))
                .inRoot(isDialog())
                .check(matches(isDisplayed()))
                .perform(click())

但是这里的测试异常失败

Waited for the root of the view hierarchy to have window focus and not request layout for 10 seconds.

调试代码时,我们发现找到了对话框,但不知何故decorView.hasWindowFocus()返回 false。

是因为 Robolectric 中的一些错误导致视图无法获得窗口焦点吗?有没有办法解决它?目前,我们正在求助于 Robolectric 阴影。

我们正在使用Robolectric 4.2AndroidX test 1.1.0版本

更新: 显然在显示对话框后,活动保持窗口焦点,所以它很可能是 Robolectric 错误(或我的误解)。

4

1 回答 1

1

Robolectric 有一个方法,它是

ShadowAlertDialog.getLatestDialog()

要在 OK 按钮上执行单击操作,您可以像这样使用它:

((AlertDialog) ShadowAlertDialog.getLatestDialog())
        .getButton(AlertDialog.BUTTON_POSITIVE).performClick();
于 2019-03-01T13:44:56.570 回答