Жёсткие задержки (Hard-coded Sleeps)

Thread.sleep используется для ожидания загрузки страницы или появления элемента. Значение задержки берётся «на глаз» и вшивается прямо в код.

Симптомы

  • Thread.sleep(3000) после клика или навигации
  • Магические числа: sleep(1000), sleep(5000) без комментария
  • TimeUnit.SECONDS.sleep(2) в Page Object или тест-методе
  • Переменная WAIT_TIMEOUT = 3000 в константах, применяемая через sleep

Причины возникновения

  • Самый очевидный способ «подождать»: разработчик добавил sleep и тест прошёл
  • Незнание Selenium Explicit/Fluent Wait API
  • Копипаста из статей и туториалов пятилетней давности
  • Давление сроков: «работает — не трогай»

Почему это проблема

  • Медленные тесты: 10 sleep по 2 сек — это минус 20 секунд на каждый прогон; при 100 тестах — уже полчаса
  • Нестабильность на CI: сервер под нагрузкой отвечает медленнее, 2 секунды не хватает — тест падает флакиво
  • Ложная надёжность: на быстрой машине тест всегда зелёный, хотя реальный пользователь может ждать дольше
  • Невозможно параллелизировать: каждый поток блокируется на sleep, не делая полезной работы

Решение

Заменить на явное ожидание конкретного условия:

// ❌
loginPage.clickLogin();
Thread.sleep(3000);
assertThat(dashboardPage.getWelcomeText()).contains("Добро пожаловать");

// ✅
loginPage.clickLogin();
assertThat(dashboardPage.waitUntilVisible().getWelcomeText())
    .contains("Добро пожаловать");