android - 如何在 Espresso 测试中重启 Android 应用程序?

标签 android kotlin android-espresso

我正在使用 Espresso 和 Kotlin 来实现 UI 测试自动化。我正在尝试找到一种合适的方法在测试期间重新启动应用程序并再次启动它,因此测试场景如下:

  • 启动应用,进入登录页面
  • 强制关闭应用程序并再次打开(基本上是重新启动)
  • 检查一些东西等

我们的 UI 测试的组织方式: 有一个测试类,我有规则

val intent = Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java)
        .putExtra(UI_TEST_INTENT, true)

@get:Rule
val rule = ActivityScenarioRule<MainActivity>(intent)

这个类有Before/After函数和测试函数

我想要的是在单独的类中拥有通用的 restartApp 函数,比方说 TestUtils 并且成为可以在需要时随时调用它。 到目前为止,我没有找到解决方案。在 stackoverflow 上有一些类似的问题,但我不确定我是否理解如何使用我找到的答案,如下所示:

with(activityRule) {
finishActivity()
launchActivity(null)

由于 ActivityTestRule 已被弃用并且文档要求使用 ActivityScenarioRule,我试过这个:

@get:Rule
val rule = ActivityScenarioRule<MainActivity>(intent)

private fun restart() {
    rule.scenario.close()
    rule.scenario.recreate()
}

但它得到 java.lang.NullPointerException

另一种选择是

private fun restart() {
    pressBackUnconditionally()
    Intents.release()
    ActivityScenario.launch<MainActivity>(intent)
}

它有效,应用程序重新启动但我不能再与该应用程序交互,因为出于某种原因现在有两个 Intent 正在运行

如果能得到一个我可以使用的答案会很棒(我对 Espresso 还很陌生)

干杯

最佳答案

找到解决方案:

private fun restart() {
    Intents.release()
    rule.scenario.close()
    Intents.init()
    ActivityScenario.launch<MainActivity>(intent)
}

关于android - 如何在 Espresso 测试中重启 Android 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65826130/

相关文章:

android - 使用 setOnClickListener 并获取“Potential NullPointerException。某些布局版本中缺少资源”

kotlin - 按 n 个条件对集合进行分组

android - 用 "hasTextColor"测试 Espresso

android - 如何使用 Espresso 测试记录器为以编程方式创建的 View 创建 UI 测试

android - OnePlus Espresso 测试运行问题 (Android Studio 3.6.2)

android - 运行时异常 : Binary XML file line #17: You must supply a layout_height attribute whie showing the popupmenu

java - 服务器客户端套接字编程

java.lang.UnsatisfiedlinkError : Native method not found

android - 尝试执行 jobb 命令时出现异常

kotlin - Kotlin 中的 emptyArray() 有什么用