package com.codeborne.selenide.impl; import com.codeborne.selenide.Configuration; import com.google.common.base.Predicate; import static java.lang.System.currentTimeMillis; public class Waiter { public <T> void wait(T subject, Predicate<T> condition) { wait(subject, condition, Configuration.timeout, Configuration.pollingInterval); } public <T> void wait(T subject, Predicate<T> condition, long timeout, long pollingInterval) { for (long start = currentTimeMillis(); !isTimeoutExceeded(timeout, start) && !condition.apply(subject); ) { sleep(pollingInterval); } } private boolean isTimeoutExceeded(long timeout, long start) { return currentTimeMillis() - start > timeout; } void sleep(long milliseconds) { try { Thread.sleep(milliseconds); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException(e); } } }