Selenium Waits - это механизмы, которые позволяют синхронизировать выполнение тестового скрипта с состоянием веб-страницы. Они решают проблему "ранних" взаимодействий с элементами, которые еще не загрузились или не стали интерактивными.
Определение: Глобальная настройка, применяемая ко всем поискам элементов в течение жизни драйвера.
Пример на Java:
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
Как работает:
Преимущества:
Недостатки:
Определение: Локальное ожидание для конкретного элемента с определенным условием.
Пример на Java:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("dynamicElement")));
Основные условия (ExpectedConditions):
visibilityOfElementLocated()
- видимость элементаelementToBeClickable()
- элемент кликабеленpresenceOfElementLocated()
- наличие в DOMtextToBePresentInElement()
- определенный текстПреимущества:
Недостатки:
Определение: Расширенная версия явного ожидания с настройкой частоты проверок и игнорируемых исключений.
Пример на Java:
Wait<WebDriver> wait = new FluentWait<>(driver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofSeconds(2))
.ignoring(NoSuchElementException.class);
WebElement element = wait.until(driver -> {
return driver.findElement(By.id("fluentElement"));
});
Преимущества:
Недостатки:
Характеристика | Implicit Wait | Explicit Wait | Fluent Wait |
---|---|---|---|
Область применения | Глобальная | Локальная | Локальная |
Гибкость | Низкая | Средняя | Высокая |
Сложность | Простая | Средняя | Сложная |
Производительность | Низкая | Высокая | Высокая |
Условия ожидания | Только наличие | Много вариантов | Любые кастомные |
// Правильный подход - только Explicit Waits
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("loader")));
WebElement result = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("result")));
Слишком большие таймауты:
Отсутствие ожиданий:
Неправильные условия:
Профессиональный совет: Для сложных SPA (Single Page Applications) комбинируйте разные условия ожидания и используйте кастомные ожидания через Fluent Wait для максимальной стабильности тестов.