Я удивлен, что предикаты не были первым выбором, поскольку вы обычно знаете, с какими элементами вы будете взаимодействовать в следующий раз на странице, которую вы ожидаете загрузить.Мой подход всегда заключался в создании предикатов / функций, таких как waitForElementByID(String id)
и waitForElemetVisibleByClass(String className)
и т. Д., А затем их использование и повторное использование везде, где они мне нужны, будь то загрузка страницы или изменение содержимого страницы, на котором я жду.1003 *
Например,
В моем тестовом классе:
driverWait.until(textIsPresent("expectedText");
В моем тестовом классе родитель:
protected Predicate<WebDriver> textIsPresent(String text){
final String t = text;
return new Predicate<WebDriver>(){
public boolean apply(WebDriver driver){
return isTextPresent(t);
}
};
}
protected boolean isTextPresent(String text){
return driver.getPageSource().contains(text);
}
Хотя это кажется большим,он выполняет повторную проверку для вас, и интервал между тем, как часто проверять, можно установить вместе с конечным временем ожидания до истечения времени ожидания.Кроме того, вы будете повторно использовать такие методы.
В этом примере родительский класс определил и инициировал WebDriver driver
и WebDriverWait driverWait
.
Надеюсь, это поможет.