← Назад к вопросам
В чем разница между 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 элементов, где нужны все результаты
Сравнительная таблица
| Параметр | Assert | Verify (SoftAssert) |
|---|---|---|
| Поведение | Прерывает при ошибке | Продолжает выполнение |
| Результат | FAILED на первой ошибке | Все ошибки в конце |
| Использование | TestNG/JUnit | TestNG только |
| 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) накапливает все ошибки и выбрасывает их в конце, позволяя получить полный отчет. Выбор между ними зависит от важности проверяемого условия и вашей стратегии тестирования.