blob: b8703c0c6f6718e0498aad18287c35c5e549e491 [file] [log] [blame]
part of webdriver;
const DEFAULT_TIMEOUT = const Duration(minutes: 1);
const DEFAULT_INTERVAL = const Duration(milliseconds: 500);
Future waitFor(Future predicate(), {Matcher matcher: isTrue,
Duration timeout: DEFAULT_TIMEOUT, Duration interval: DEFAULT_INTERVAL}) {
var endTime = new DateTime.now().add(timeout);
var function;
function = () async {
var value = await predicate();
try {
expect(value, matcher);
return value;
} catch (e) {
if (new DateTime.now().isAfter(endTime)) {
rethrow;
}
}
return await new Future.delayed(DEFAULT_INTERVAL, function);
};
return function();
}