← Назад к вопросам

В чем разница между Assert и Verify в Selenium?

2.0 Middle🔥 131 комментариев
#Тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Разница между Assert и Verify в Selenium

Оба инструмента используются для проверки условий в тестах автоматизации, но они отличаются в поведении при неудаче.

Assert: Жесткие проверки (Hard Assert)

Assert прерывает выполнение теста при первой ошибке:

import org.junit.Assert;

public class LoginTest {
    @Test
    public void testLogin() {
        WebDriver driver = new ChromeDriver();
        driver.get("https://example.com/login");
        
        // Проверка 1
        Assert.assertEquals("Login Page", driver.getTitle());
        
        // Если проверка выше не прошла, код ниже не выполнится
        WebElement loginBtn = driver.findElement(By.id("login"));
        loginBtn.click();
        
        // Проверка 2
        Assert.assertTrue(driver.findElement(By.id("dashboard")).isDisplayed());
        
        driver.quit();
    }
}

Поведение:

  • Если первый Assert падает → тест падает сразу
  • Последующий код не выполняется
  • Тест помечается как FAILED

Когда использовать:

  • Проверка критических условий
  • Когда дальнейшее выполнение невозможно
  • Проверка предварительных условий (prerequisites)

Verify: Мягкие проверки (Soft Assert)

Verify продолжает выполнение теста, накапливая ошибки:

import org.testng.asserts.SoftAssert;

public class LoginTest {
    @Test
    public void testLoginWithVerify() {
        SoftAssert softAssert = new SoftAssert();
        WebDriver driver = new ChromeDriver();
        driver.get("https://example.com/login");
        
        // Проверка 1 (не прерывает тест)
        softAssert.assertEquals(driver.getTitle(), "Login Page", "Неверный заголовок");
        
        // Код выполняется даже если проверка выше не прошла
        WebElement loginBtn = driver.findElement(By.id("login"));
        loginBtn.click();
        
        // Проверка 2 (тоже не прерывает)
        softAssert.assertTrue(
            driver.findElement(By.id("dashboard")).isDisplayed(),
            "Dashboard не виден"
        );
        
        // Проверка 3
        softAssert.assertEquals(
            driver.findElement(By.id("username")).getText(),
            "John Doe",
            "Имя пользователя неверно"
        );
        
        // Обязательный вызов в конце!
        softAssert.assertAll(); // Вызовет AssertionError с ВСЕ ошибками
        driver.quit();
    }
}

Поведение:

  • Все проверки выполняются
  • Ошибки накапливаются
  • assertAll() генерирует исключение с ВСЕМИ ошибками
  • Нельзя забыть вызвать assertAll() в конце!

Когда использовать:

  • Проверка некритических параметров
  • Когда хотите получить полный отчет об ошибках
  • Тестирование UI элементов, где нужны все результаты

Сравнительная таблица

ПараметрAssertVerify (SoftAssert)
ПоведениеПрерывает при ошибкеПродолжает выполнение
РезультатFAILED на первой ошибкеВсе ошибки в конце
ИспользованиеTestNG/JUnitTestNG только
assertAll()Не нуженОбязателен!
СценарийКритические проверкиМножественные проверки

Практические примеры

Пример 1: Когда использовать Assert

// Проверка логина - критично!
Assert.assertTrue(driver.findElement(By.id("error")).getText().isEmpty(),
                  "Ошибка логина");
// Если ошибка, дальше выполнять не имеет смысла

Пример 2: Когда использовать Verify

SoftAssert soft = new SoftAssert();

// Проверяем все элементы профиля
soft.assertEquals(email, expectedEmail, "Email неверен");
soft.assertEquals(phone, expectedPhone, "Телефон неверен");
soft.assertEquals(address, expectedAddress, "Адрес неверен");
soft.assertEquals(age, expectedAge, "Возраст неверен");

// Получим все ошибки сразу
soft.assertAll();

Типичные ошибки

Ошибка 1: Забыли assertAll()

// ❌ Неправильно
SoftAssert soft = new SoftAssert();
soft.assertEquals(a, b);
soft.assertEquals(c, d);
// Забыли soft.assertAll() - ошибки не будут выброшены!

Ошибка 2: Используете Assert когда нужна Verify

// ❌ Неправильно - падает на первой ошибке
Assert.assertEquals(field1, value1);
Assert.assertEquals(field2, value2);
Assert.assertEquals(field3, value3);
// Никогда не узнаете про ошибки в field2 и field3

Заключение

Assert используется для критических проверок, которые должны прервать тест при ошибке. Verify (SoftAssert) накапливает все ошибки и выбрасывает их в конце, позволяя получить полный отчет. Выбор между ними зависит от важности проверяемого условия и вашей стратегии тестирования.

В чем разница между Assert и Verify в Selenium? | PrepBro