繁体   English   中英

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

[英]How to restart Android app within Espresso test?

我将 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)
}

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

能得到一个我可以合作的答案会很棒(我对 Espresso 很陌生)

干杯

找到解决办法:

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

似乎作者的答案有一些多余的代码。 以下就够了

activityScenarioRule.scenario.close() 
ActivityScenario.launch(YourActivity::class.java, null)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM