返回

Espresso 强制屏幕截图导致测试延迟:解决方案和常见问题解答

java

Espresso 强制在 DefaultFailureHandler 中创建屏幕截图,导致测试延迟

问题

在 Espresso 3.5.1 版本中,调用 onData() 方法后,Espresso 会在 DefaultFailureHandler 中强制等待 5 秒以创建屏幕截图。即使在未使用 DefaultFailureHandler 处理失败时创建屏幕截图的情况下,也会出现此问题。

后果

此延迟会导致方法性能严重下降,特别是在循环中调用时。它还强制应用程序显示媒体访问权限弹出窗口,即使不打算创建屏幕截图也是如此。

解决方案

该问题可以通过以下方法解决:

  • 禁用 DefaultFailureHandler 中的屏幕截图创建: 这可以通过使用 FailureHandler 的自定义实现来实现,如下所示:
@Override
public void handle(Throwable error, Matcher<View> viewMatcher) {
  // Do not create a screenshot
}
  • 升级到 Espresso 3.6.x-alpha: 此版本的 Espresso 修复了该问题。然而,在生产代码中使用它是不建议的,因为它是一个 alpha 版本。

结论

Espresso 3.5.1 中的强制屏幕截图创建问题导致测试延迟。可以通过禁用 DefaultFailureHandler 中的屏幕截图创建或升级到 Espresso 3.6.x-alpha 版本来解决此问题。

常见问题解答

1. 为什么 Espresso 在 DefaultFailureHandler 中创建屏幕截图?

DefaultFailureHandler 默认情况下在失败时创建屏幕截图,以帮助调试失败的测试。

2. 如何禁用 DefaultFailureHandler 中的屏幕截图创建?

通过使用自定义 FailureHandler 实现,可以禁用 DefaultFailureHandler 中的屏幕截图创建,如下所示:

@Override
public void handle(Throwable error, Matcher<View> viewMatcher) {
  // Do not create a screenshot
}

3. 是否建议升级到 Espresso 3.6.x-alpha 版本?

对于生产代码,不建议升级到 Espresso 3.6.x-alpha 版本,因为它是一个 alpha 版本。

4. 此问题会影响所有使用 Espresso 的测试吗?

此问题会影响所有使用 onData() 方法的 Espresso 测试。

5. 此问题是如何在 Espresso 3.5.1 版本中引入的?

此问题是在 Espresso 3.5.1 版本中引入的内部更改导致的。