UI 测试 Android Studio 中的条件警报对话框

Conditional Alert Dialogs in UI Tests Android Studio

当用户登录我的应用程序时,如果这是他们第一次登录,则会出现一个警告对话框。 否则不出现。

这让我在尝试编写 UI 测试时变得棘手。 由于警报对话框有条件地出现,我无法使用以下方法关闭它: onView(withId(android.R.id.button1)).perform(click()) 正如我在其他帖子中看到的那样。

但是,如果它确实出现并且我没有在我的测试中关闭它,测试将被阻止继续进行(因为它不识别任何其他视图 ID)并失败。

有人对我如何处理这件事有什么建议吗?

谢谢!

这听起来像是(但我不得不猜测,因为您没有提供更多详细信息)您正在根据您在本地存储的值来控制 "first time" 对话框的显示,也许是PersistentState

如果是这种情况,您可以直接从 Espresso 测试中控制该值,从而使测试状态符合预期。

此外,只是一个旁注——我强烈建议不要进行依赖 Espresso 测试,这听起来像你有,基于“如果它确实出现并且我没有在我的内部关闭它测试,测试被阻止继续”。

您的测试必须能够以随机顺序执行并通过。

However, if it does appear and I do not close it within my test, the test is blocked from moving on (as it does not recognise any other view ids) and fails.

Does anyone have any recommendations about how I might handle this?

无论何时编写测试,都必须确保所需条件到位,以可靠且一致地 运行 相关测试。这是 Arrange, Act, Assert 成语的 "arrange" 部分。

因此,如果您要测试涉及对话框的流程,则必须安排测试以设置显示该对话框的条件。

如果您测试的流程涉及对话框,您必须安排测试以设置对话框不显示的条件。

你没有发布代码所以我不知道显示对话框的 "condition" 是什么,但基本上你需要在你的测试中做一些事情来确保如果你不想对话框或 true 如果你这样做。也许这是在设置共享偏好?

例如,您的测试可能大致如下所示:

@Test
fun myAwesomeTest() {
    // Arrange - do something to ensure dialog does not show
    SomeHelperClass.setConditionToShowDialog(false)

    // Act - do actions knowing the dialog will not show
    onView(withId(R.id.awesomeId)).perform(click())

    // Assert
    onView(withId(R.id.duperId)).check(matches(isVisible()))
}

同样,如果没有您的代码的细节,很难提供更多细节,但希望这足以让您继续前进。

希望对您有所帮助!