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

Как интегрировать Selenium с TestNG?

1.7 Middle🔥 201 комментариев
#Selenium и UI автоматизация

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

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

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

Интеграция Selenium с TestNG: полное руководство

Интеграция Selenium WebDriver с TestNG — это стандартный подход для создания структурированных, поддерживаемых и мощных автотестов веб-приложений. TestNG предоставляет богатый набор аннотаций, конфигураций и отчетов, которые значительно усиливают возможности Selenium.

Основные шаги интеграции

1. Настройка проекта и зависимостей Создайте Maven или Gradle проект и добавьте зависимости в pom.xml:

<dependencies>
    <!-- Selenium WebDriver -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.15.0</version>
    </dependency>
    
    <!-- TestNG -->
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.8.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

2. Создание базового класса для управления WebDriver Используйте TestNG аннотации для управления жизненным циклом браузера:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;

public class BaseTest {
    protected WebDriver driver;
    
    @BeforeSuite
    public void setUpSuite() {
        // Настройка системы, логирование, отчетность
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
    }
    
    @BeforeMethod
    public void setUp() {
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }
    
    @AfterMethod
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
    
    @AfterSuite
    public void tearDownSuite() {
        // Очистка ресурсов, генерация отчетов
    }
}

3. Создание тестовых классов с TestNG аннотациями

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
import org.testng.annotations.Test;

public class LoginTest extends BaseTest {
    
    @Test(priority = 1, description = "Успешный логин")
    public void testSuccessfulLogin() {
        driver.get("https://example.com/login");
        WebElement username = driver.findElement(By.id("username"));
        WebElement password = driver.findElement(By.id("password"));
        WebElement submit = driver.findElement(By.cssSelector("button[type='submit']"));
        
        username.sendKeys("testuser");
        password.sendKeys("password123");
        submit.click();
        
        String expectedUrl = "https://example.com/dashboard";
        Assert.assertEquals(driver.getCurrentUrl(), expectedUrl, "Редирект на dashboard не выполнен");
    }
    
    @Test(priority = 2, groups = {"regression"}, dependsOnMethods = "testSuccessfulLogin")
    public void testLogoutFunctionality() {
        // Тест выхода из системы
    }
}

Ключевые преимущества интеграции

Аннотации TestNG для управления жизненным циклом тестов:

  • @BeforeSuite/@AfterSuite — выполнение до/после всех тестов
  • @BeforeTest/@AfterTest — выполнение до/после тестов в теговом теге
  • @BeforeMethod/@AfterMethod — выполнение до/после каждого тестового метода
  • @BeforeClass/@AfterClass — выполнение до/после всех методов в классе
  • @Test — основная аннотация для тестовых методов

Параметризация тестов с использованием @DataProvider:

@Test(dataProvider = "loginData")
public void testParameterizedLogin(String username, String password, boolean expected) {
    // Тест с различными данными
}

@DataProvider(name = "loginData")
public Object[][] provideLoginData() {
    return new Object[][] {
        {"user1", "pass1", true},
        {"invalid", "password", false},
        {"", "", false}
    };
}

Расширенные возможности

1. Конфигурация через testng.xml:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Selenium Test Suite" parallel="tests" thread-count="3">
    <test name="Chrome Tests">
        <parameter name="browser" value="chrome"/>
        <classes>
            <class name="com.example.LoginTest"/>
            <class name="com.example.SearchTest"/>
        </classes>
    </test>
    <test name="Firefox Tests">
        <parameter name="browser" value="firefox"/>
        <classes>
            <class name="com.example.LoginTest"/>
        </classes>
    </test>
</suite>

2. Параллельное выполнение тестов с атрибутами parallel и thread-count

3. Группировка тестов для избирательного запуска:

@Test(groups = {"smoke", "regression"})
@Test(groups = {"integration"})

4. Настройка listeners для кастомной обработки событий:

import org.testng.ITestListener;
import org.testng.ITestResult;

public class CustomListener implements ITestListener {
    @Override
    public void onTestFailure(ITestResult result) {
        // Скриншот при падении теста
        TakeScreenshot.takeScreenshot(driver, result.getName());
    }
}

Лучшие практики интеграции

  • Используйте Page Object Pattern для разделения логики тестов и работы с элементами
  • Настройте правильный порядок аннотаций для оптимального управления ресурсами
  • Применяйте мягкие assertions через SoftAssert для проверки нескольких условий
  • Используйте TestNG отчеты в комбинации с Allure или ExtentReports
  • Настройте retry механизм через IRetryAnalyzer для нестабильных тестов
  • Интегрируйте с CI/CD через Maven/Gradle плагины для автоматического запуска

Интеграция Selenium с TestNG создает мощную экосистему для автоматизации тестирования, обеспечивая структурированность, поддерживаемость и расширяемость тестового кода. Эта комбинация является промышленным стандартом и позволяет эффективно решать сложные задачи автоматизированного тестирования веб-приложений.