Espresso:忽略AppNotIdleException

时间:2018-01-16 12:20:34

标签: java android android-espresso

我使用Espresso编写了一个UI测试框架来读取CSV文件并运行某些UI命令。我希望这能够全天候运行,测试用户界面并调用API,然后尝试打破它。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是非常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秒之后总会抛出这个异常,所以我只是在指定的延迟超过59秒的情况下添加了for循环。循环只是将指定的延迟划分为50秒的块并单击一个静态的视图,并且没有onClickListener,在本例中为“rolling_news”。即使这是非常糟糕的做法,这也是我追求的最终效果