Java: Selenium

Теория: Механизмы ожиданий

Многие UI‑тесты падают из‑за того, что элементы появляются не сразу. Для стабильности нужны ожидания. В этом уроке мы разберем неявные и явные ожидания.

Проблемы нестабильных тестов

Страница может загружаться медленно, элементы появляются после запросов, а анимации задерживают клики. Если тест кликает раньше времени, он падает с ошибкой NoSuchElementException или ElementNotInteractableException.

Неявные ожидания

Неявное ожидание применяется ко всем поискам элементов:

import java.time.Duration;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

class ImplicitWaitTest {
    @Test
    void useImplicitWait() {
        var driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        driver.quit();
    }
}

После этого findElement() будет ждать появление элемента до пяти секунд.

Явные ожидания

Явные ожидания позволяют ждать конкретное условие:

import java.time.Duration;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

class ExplicitWaitTest {
    @Test
    void useExplicitWait() {
        var driver = new ChromeDriver();
        driver.get("https://example.com/login");

        var wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        var button = wait.until(
            ExpectedConditions.elementToBeClickable(By.id("submit"))
        );
        button.click();

        driver.quit();
    }
}

Здесь ожидание завершится, когда кнопка станет кликабельной.

Надежные ожидания

Лучше использовать явные ожидания в местах, где мы знаем, что элемент появляется позже: модальные окна, асинхронная загрузка, динамические списки. Это делает тесты предсказуемыми и снижает число случайных падений.

Рекомендуемые программы

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845