浓缩咖啡:忽略 AppNotIdleException

Espresso: Ignore AppNotIdleException

我编写了一个 UI 测试框架,使用 Espresso 读取 CSV 文件和 运行 某些 UI 命令。我希望这能够 运行 整天和整夜测试 UI 并调用 API 并试图破坏它。

我正在使用 wait(),虽然我知道它被积极劝阻,因为系统会创建并打印纸质票据,这意味着浓缩咖啡往往移动得太快,因为它需要 运行 很长时间时间,我们不希望创建数百万张票。在抛出 AppNotIdleException 之前尝试保持在浓缩咖啡给你的 60 秒内不是很有效,所以我想知道是否有办法停用它或扩展它或捕获异常并以另一种方式处理它

不要认为 Thread.wait() 是个好主意。您应该看看 IdlingResource 组件。阅读 docs and look at samples.

它非常 hacky,并且违背了 Espresso 文档中提到的所有内容(但概念本身也是如此),但我找到了解决 AppNotIdleException 的方法。

public void delayTestsbyMillis(int millis) {
    try {
        if(millis < 59000)
            Thread.sleep(millis);
        else {
            int numLoop = millis/50000;
            for(int i = 0; i < numLoop; i++){
                Thread.sleep(50000);
                onView(withId(R.id.rolling_news)).perform(click());
            }
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

由于Java不会让我们忽略异常,并且因为这个异常总是在 60 秒没有交互后抛出,所以我只是在指定的延迟超过的情况下添加了一个 for 循环59 秒。循环只是将指定的延迟分成 50 秒的块,然后单击一个静态且没有 onClickListener 的视图,在本例中为 "rolling_news"。这有我想要的最终效果,即使它真的很糟糕