Espresso 可以在没有意图启动活动的情况下工作吗?

Posted

技术标签:

【中文标题】Espresso 可以在没有意图启动活动的情况下工作吗?【英文标题】:Can Espresso work without launching activity with intent? 【发布时间】:2019-01-30 16:48:06 【问题描述】:

我想编写一个 Espresso 测试,该测试将使用我平板电脑屏幕上当前启动的活动。因此,我将在启动测试之前手动导航到具有适当内容的该活动,因为很难且不愿意编写额外的代码来在应用程序中以相同的全局“状态”启动此活动并在启动时传递所有需要的参数意图等等。

是否有可能以及如何使用 Espresso, 还是我必须使用 UI Automator?

【问题讨论】:

你能提供一个你想采取什么行动的例子吗?如果它只是像用户那样打开应用程序并导航到一个活动,那么这应该不是 Espresso 的问题。 一个机器人,我希望 Espresso 测试能够在页面上填充大量输入字段,但我会在运行测试之前手动打开所需的页面(活动)。但是,当我运行测试时,android Studio 似乎也在“重新启动”我的应用程序。 @Mike 你的意图破坏了自动化测试的整个想法......并且可能比编写测试规则然后简单地使用它们,同时获得新鲜咖啡更浪费时间。此外,它还可能会扭曲结果的准确性。 @Mike 您可以这样做,首先您必须打开所需的活动,然后从该活动中,您只需编写 onView(withId(Id of view)).perform(click() ) 方法来打开将具有多个输入字段的活动。 @Mike 当您运行测试用例时,它将始终启动应用程序,因此手动打开的屏幕在任何情况下都不起作用,您必须打开该屏幕或测试用例中的活动。 【参考方案1】:

如果您绝对不想设置启动要测试的活动的意图,那么您可以在测试中使用断点。这将允许您在 Espresso 测试开始执行之前手动导航到活动。 不过,我想说的是,至少您应该使用 Espresso 来自动执行这些手动步骤。

@Test
fun testActivityIsDisplayed() 
    openTestActivity() //automate with espresso or put breakpoint to do manually
    onView(withId(R.id.testActivity)).check(matches(isDisplayed()))


private fun openTestActivity() 
    ...

【讨论】:

好吧,似乎只有这样可能。我会考虑有意识地启动,虽然这个想法让我很困扰,因为活动在中间的某个地方,而不是可以从外部调用的屏幕

以上是关于Espresso 可以在没有意图启动活动的情况下工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

从 Maps Intent espresso 回到活动 - UI 测试

Espresso 不使用 Gif 动画运行 Activity 测试

在一个活动中,如果活动被暂停,然后用一个意图调用,getIntent() 返回旧的

如何使用 IntentsTestRule 和 launchFragmentInContainer 测试从片段发送的意图

另一个活动的Android意图被多次执行

在没有新意图的情况下,我应该如何从通知返回到活动