Что такое явные ожидания в тестировании
Что проверяют
Базовую гигиену автотестов. Интерфейс асинхронен: данные приходят запросом, элементы дорисовываются, анимация заканчивается не мгновенно. Проверяют, умеете ли вы ждать условие, а не время, и понимаете ли разницу между явным ожиданием, неявным и обычной паузой.
Как отвечать
Явное ожидание это ожидание конкретного условия для конкретного элемента со своим таймаутом: тест опрашивает состояние страницы с небольшим интервалом и идёт дальше сразу, как только условие выполнилось, а по истечении таймаута падает с внятным сообщением.
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.elementToBeClickable(By.id("submit"))).click();Неявное ожидание это глобальная настройка драйвера, таймаут на поиск элемента. Она действует на все поиски сразу и умеет ждать только появление узла в дереве. Пауза фиксированной длины не ожидание вовсе: на быстром стенде она тратит время, на медленном не спасает.
Полезно добавить, что в современных инструментах ожидание встроено в сами действия, и явное остаётся для доменных условий: пропал индикатор загрузки, в таблице появилась нужная строка, счётчик изменился. Условие всегда формулируется про состояние приложения, а не про длительность.
Где спотыкаются
Смешивают явное и неявное ожидание в одном проекте. Таймауты складываются непредсказуемо, тесты начинают ждать дольше положенного в странных местах, поэтому неявное обычно выключают совсем.
Ставят паузу и называют это стабилизацией. Прогон распухает, гонка никуда не девается и выстреливает на загруженном стенде, а причину после этого ищут в приложении, хотя дело в тесте.
Ждут не того условия: наличия узла в дереве вместо видимости или кликабельности, либо ждут элемент, который тут же перерисовывается целиком. Ожидание проходит, следующий шаг падает на устаревшей ссылке на элемент.