我有一个RecyclerView,数据以异步方式加载。
底层引擎不使用AsyncTasks,而是使用java Executor。
如何让Espresso在超时后等待(或定期检查),直到满足给定条件?
我读过有关IdlingResource的内容,但在我看来,根据具体情况进行挖掘太深,可能存在一些通用的东西,可以定期检查条件,直到它已完成或超时发生。
如果符合条件,无法每隔几百毫秒检查一次?无需钻研内部工作...... 这会是性能问题吗?
答案 0 :(得分:0)
您可以使用类似waitFor方法的内容。
public class WaitAction implements ViewAction {
/** The amount of time to allow the main thread to loop between checks. */
private final Matcher<View> condition;
private final long timeoutMs;
public WaitAction(Matcher<View> condition, long timeout) {
this.condition = condition;
this.timeoutMs = timeout
}
@Override
public Matcher<View> getConstraints() {
return (Matcher) anything();
}
@Override
public String getDescription() {
return "wait";
}
@Override
public void perform(UiController controller, View view) {
controller.loopMainThreadUntilIdle();
final long startTime = System.currentTimeMillis();
final long endTime = startTime + timeoutMs;
while (System.currentTimeMillis() < endTime) {
if (condition.matches(view)) {
return;
}
controller.loopMainThreadForAtLeast(100);
}
// Timeout.
throw new PerformException();
}
public static ViewAction waitFor(Matcher<View> condition, long timeout) {
return new WaitAction(condition, timeout);
}
}
您可以将其用作以下内容
onView(<some view matcher>).perform(WaitAction.waitFor(<Some condition>));