我使用Espresso编写了一个UI测试框架来读取CSV文件并运行某些UI命令。我希望它能够整天整夜运行,测试UI并调用API,只是试图打破它。
我正在使用wait((,尽管我知道它被积极不鼓励,因为系统创建和打印物理纸质票证,这意味着浓缩咖啡往往移动得太快,并且因为它需要运行很长时间,我们不希望创建数百万张票。在 AppNotIdleException 被抛出之前尝试保持在 espresso 给你的 60 秒内并不是很有效率,所以我想知道是否有办法停用它或扩展它或捕获异常并以另一种方式处理它
不要认为Thread.wait()
是个好主意。您应该查看IdlingResource
组件。阅读文档并查看示例。
它非常笨拙,违背了 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"。这有我所追求的最终效果,即使它真的很糟糕的做法