Ответ
Fluent Wait — это гибкая и настраиваемая реализация явного ожидания (Explicit Wait) в Selenium WebDriver. Он позволяет задать условие, которое драйвер будет проверять с заданной частотой в течение максимального времени, игнорируя указанные исключения.
Ключевые отличия от простого WebDriverWait:
- Настраиваемая частота опроса (polling interval): Можно указать, как часто проверять условие (например, каждые 500 мс).
- Игнорирование исключений: Можно указать, какие исключения (например,
NoSuchElementException) игнорировать во время ожидания, пока не истечёт таймаут. - Кастомизация сообщения об ошибке: Возможность добавить понятное сообщение, если условие не выполнилось.
Пример использования Fluent Wait на Java:
import org.openqa.selenium.support.ui.FluentWait;
import java.time.Duration;
// Создание и настройка FluentWait
Wait<WebDriver> wait = new FluentWait<>(driver)
.withTimeout(Duration.ofSeconds(30)) // Максимальное время ожидания
.pollingEvery(Duration.ofMillis(500)) // Проверять условие каждые 500 мс
.ignoring(NoSuchElementException.class) // Игнорировать это исключение в процессе ожидания
.ignoring(StaleElementReferenceException.class)
.withMessage("Элемент с id='dynamic-widget' не появился за 30 секунд"); // Сообщение при таймауте
// Применение ожидания. Условие (ExpectedCondition) будет переоцениваться каждые 500 мс.
WebElement dynamicElement = wait.until(
d -> d.findElement(By.id("dynamic-widget"))
);
// После появления элемента можно с ним взаимодействовать
dynamicElement.click();
Когда использовать: Для ожидания сложных, кастомных условий появления или изменения элементов в динамическом веб-интерфейсе, где стандартные ожидания недостаточно гибки.