Java: Selenium

Теория: Работа с ошибками

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

Скриншоты при ошибках

Скриншот помогает увидеть состояние страницы в момент падения. В Selenium используется интерфейс TakesScreenshot:

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.TakesScreenshot;

class ScreenshotTest {
    @Test
    void takeScreenshot() throws Exception {
        var driver = new ChromeDriver();
        driver.get("https://example.com");

        File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        Files.copy(screenshot.toPath(), Path.of("build", "screen.png"));

        driver.quit();
    }
}

Путь и имя файла можно выбирать по формату теста, например с названием сценария.

Логирование и отладка

В тестах полезно логировать ключевые шаги: открытие страницы, клик, ожидание. Для начала достаточно System.out.println(), а затем можно подключить логгер.

import org.junit.jupiter.api.Test;

class LoggingTest {
    @Test
    void logStep() {
        System.out.println("Открываем страницу логина");
    }
}

Обработка ошибок

Иногда полезно перехватывать исключения, чтобы добавить контекст:

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

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

        try {
            driver.findElement(By.id("submit")).click();
        } catch (Exception e) {
            System.out.println("Не удалось нажать кнопку входа");
            throw e;
        } finally {
            driver.quit();
        }
    }
}

Так в отчете остаются дополнительные подсказки.

Повтор запуска теста

Простейший подход — повторить сценарий один раз при падении. Это не решает причин нестабильности, но помогает временно уменьшить случайные ошибки:

import org.junit.jupiter.api.Test;

class RetryTest {
    @Test
    void runWithRetry() {
        var attempts = 0;
        while (attempts < 2) {
            try {
                runScenario();
                break;
            } catch (Exception e) {
                attempts++;
                if (attempts == 2) {
                    throw e;
                }
            }
        }
    }

    private void runScenario() {
        // шаги теста
    }
}

В следующих уроках мы добавим более надежные практики диагностики через отчеты и CI.

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

+7 800 100 22 47

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

+7 495 085 21 62

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

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