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



我使用Espresso和Kotlin进行UI测试自动化。我试图找到一个适当的方法来重新启动应用程序在测试期间,再次启动它,所以测试场景如下:

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

UI测试的组织方式:有一个测试类,其中有rules

val intent = Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java)
.putExtra(UI_TEST_INTENT, true)
@get:Rule
val rule = ActivityScenarioRule<MainActivity>(intent)

there Before/After函数和该类中的test函数

我想要的是通用的restartApp分隔类中的函数,比如testtils,并且能够在需要时随时调用它。到目前为止,我还没有找到解决办法。在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)
}

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

如果能得到一个我可以使用的答案就太好了(我对浓缩咖啡很陌生)

欢呼

解决方案找到了:

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

似乎作者的答案有一些多余的代码。以下内容足够

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

最新更新