Espresso 强制屏幕截图导致测试延迟:解决方案和常见问题解答
2024-03-29 08:19:36
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 版本中引入的内部更改导致的。