Работал ли ты с Selenium?

«Работал ли ты с Selenium?» — вопрос из категории Selenium и Selenide, который задают на 35% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я использовал Selenium WebDriver для автоматизации UI-тестов веб-приложений. Мой основной стек — Java, Selenium, TestNG/JUnit, Maven/Gradle с обязательным применением Page Object Model (POM) для поддержания читаемости и реюзабельности кода.

Ключевые практики, которые я применяю:

  1. Page Object Model: Каждая страница или значимый компонент представлен отдельным классом, что изолирует локаторы и действия.
  2. Explicit Waits: Использую WebDriverWait для ожидания элементов, что делает тесты стабильнее.
  3. Параллельный запуск: Настраивал Selenium Grid или использовал возможности TestNG для параллельного выполнения тестов в разных браузерах.
  4. Интеграция с системами отчетности: Настраивал генерацию подробных отчетов через Allure или ExtentReports.

Пример теста на Java (TestNG + Page Object):

// Page Object Class
public class LoginPage {
    private WebDriver driver;
    private By usernameField = By.id("username");
    private By passwordField = By.id("password");
    private By submitButton = By.cssSelector("button[type='submit']");
    private By errorMessage = By.className("alert-error");

    public LoginPage(WebDriver driver) {
        this.driver = driver;
    }

    public void login(String username, String password) {
        driver.findElement(usernameField).sendKeys(username);
        driver.findElement(passwordField).sendKeys(password);
        driver.findElement(submitButton).click();
    }

    public boolean isErrorMessageDisplayed() {
        return driver.findElement(errorMessage).isDisplayed();
    }
}

// Test Class
public class LoginTests {
    WebDriver driver;
    LoginPage loginPage;

    @BeforeMethod
    public void setUp() {
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
        driver.get("https://example.com/login");
        loginPage = new LoginPage(driver);
    }

    @Test
    public void testLoginWithInvalidCredentialsShowsError() {
        loginPage.login("wrongUser", "wrongPass");

        // Используем Explicit Wait для ожидания ошибки
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
        wait.until(ExpectedConditions.visibilityOfElementLocated(
            loginPage.getErrorMessageLocator()
        ));

        Assert.assertTrue(loginPage.isErrorMessageDisplayed(), 
            "Error message should be visible after invalid login");
    }

    @AfterMethod
    public void tearDown() {
        driver.quit();
    }
}

Для быстрого написания стабильных тестов на Java я также использовал Selenide — обертку над Selenium с более лаконичным синтаксисом.