Ответ
Selenide из коробки предоставляет мощные и лаконичные механизмы для работы с асинхронностью (AJAX, динамическая загрузка, анимации) через неявные ожидания (smart waits).
Основные принципы:
-
Автоматическое ожидание: Все команды поиска (
$,$$) и действия (click,setValue) по умолчанию ждут до 4 секунд (настраивается черезConfiguration.timeout), пока элемент станет видимым, появится в DOM и станет кликабельным.// Selenide автоматически подождет появления и кликабельности кнопки $("button.submit").click(); -
Явные проверки с ожиданием (Should-методы): Для проверки состояний после асинхронных действий.
// Ждем, пока элемент не станет видимым $("#loading").should(disappear); // Ждем появления определенного текста после AJAX-запроса $(".results").shouldHave(text("Data loaded successfully")); // Ждем изменения атрибута $("#status").shouldHave(attribute("data-state", "completed")); -
Работа с коллекциями: Ожидание появления/изменения нескольких элементов.
// Ждем, пока в таблице не появится хотя бы 5 строк $$("table tr").shouldHave(sizeGreaterThan(4)); -
Кастомные условия: Можно создавать свои условия ожидания с помощью
Condition.$("#progress-bar").shouldHave(cssClass("full")); -
Ожидание с таймаутом: Если для конкретного действия нужен другой таймаут.
$("#slow-element").click(10); // Ждать до 10 секунд $("#slow-element").shouldBe(visible, Duration.ofSeconds(15));
Почему это удобно: Не нужно писать явные Thread.sleep() или сложные конструкции с WebDriverWait. Selenide делает код чище и устойчивее к "flaky tests".