Автоматизація користувацького інтерфейсу сторінки входу за допомогою Java та Selenium

Цей покроковий посібник допоможе вам автоматизувати тестування сторінки входу до вебзастосунку за допомогою Java, Selenium WebDriver та TestNG. У рамках проєкту ви створите тестові кейси для перевірки помилок валідації, коректності введення даних та сценаріїв успішного входу.

Технології та інструменти

  • Мова програмування: Java
  • Інструмент автоматизації: Selenium WebDriver
  • Фреймворк для тестування: TestNG
  • Браузери: Google Chrome, Mozilla Firefox
  • Середовище розробки (IDE): IntelliJ IDEA або Eclipse
  • Система збирання: Maven (для управління залежностями)

Етапи реалізації проєкту

1. Налаштування середовища

  1. Встановіть Java та налаштуйте змінну середовища JAVA_HOME.
  2. Завантажте відповідний WebDriver для браузера, наприклад:
    • ChromeDriver — для Google Chrome
    • GeckoDriver — для Mozilla Firefox
  3. Встановіть TestNG.
  4. Створіть Maven-проєкт і додайте залежності до файлу pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ui.automation</groupId>
    <artifactId>login-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- Selenium Dependency -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0</version>
        </dependency>

        <!-- TestNG Dependency -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.4.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

2. Розробка тестових кейсів

Нижче наведено приклади основних сценаріїв для тестування сторінки входу:

Тест 1: Успішний вхід з валідними даними

  • Ввести правильне ім’я користувача та пароль.
  • Перевірити, що відбувається перенаправлення на головну сторінку або з’являється повідомлення про успішний вхід.

Тест 2: Вхід з неправильними даними

  • Ввести неіснуючі або некоректні дані.
  • Переконатися, що з’являється відповідне повідомлення про помилку.

Тест 3: Порожні поля

  • Не вводити жодних даних у поля і натиснути кнопку входу.
  • Перевірити повідомлення про необхідність заповнення полів.

Тест 4: Шифрування пароля

  • Перевірити, що символи пароля відображаються у вигляді зірочок або крапок (******) — тобто шифрування візуальне.

3. Приклад тестового сценарію

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class LoginTests {
    WebDriver driver;

    @BeforeMethod
    public void setup() {
        // Set the path to your browser driver (e.g., chromedriver)
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://example-login-page.com");
    }

    @Test
    public void testSuccessfulLogin() {
        WebElement usernameField = driver.findElement(By.id("username"));
        WebElement passwordField = driver.findElement(By.id("password"));
        WebElement loginButton = driver.findElement(By.id("loginButton"));

        // Enter valid credentials
        usernameField.sendKeys("validUser");
        passwordField.sendKeys("validPassword");
        loginButton.click();

        // Verify that user is redirected to the dashboard page
        String dashboardTitle = driver.getTitle();
        Assert.assertEquals(dashboardTitle, "Dashboard", "User was not redirected to the Dashboard.");
    }

    @Test
    public void testInvalidLogin() {
        WebElement usernameField = driver.findElement(By.id("username"));
        WebElement passwordField = driver.findElement(By.id("password"));
        WebElement loginButton = driver.findElement(By.id("loginButton"));

        // Enter invalid credentials
        usernameField.sendKeys("invalidUser");
        passwordField.sendKeys("invalidPassword");
        loginButton.click();

        // Verify error message
        WebElement errorMessage = driver.findElement(By.id("errorMessage"));
        Assert.assertEquals(errorMessage.getText(), "Invalid username or password", "Error message not displayed as expected.");
    }

    @Test
    public void testEmptyFieldsValidation() {
        WebElement loginButton = driver.findElement(By.id("loginButton"));
        loginButton.click();

        // Verify validation messages
        WebElement usernameError = driver.findElement(By.id("usernameError"));
        WebElement passwordError = driver.findElement(By.id("passwordError"));
        Assert.assertEquals(usernameError.getText(), "Username is required", "Username validation message is incorrect.");
        Assert.assertEquals(passwordError.getText(), "Password is required", "Password validation message is incorrect.");
    }

    @Test
    public void testPasswordMasking() {
        WebElement passwordField = driver.findElement(By.id("password"));
        passwordField.sendKeys("testPassword");

        // Verify password is masked
        String passwordType = passwordField.getAttribute("type");
        Assert.assertEquals(passwordType, "password", "Password is not masked.");
    }

    @AfterMethod
    public void teardown() {
        // Close the browser after each test
        driver.quit();
    }
}

4. Запуск тестів

Тести можна запустити одним із двох способів:

  • У середовищі IDE: Правий клік → Run with TestNG
  • Через командний рядок за допомогою Maven:
mvn test

5. Покращення та розширення

Кросбраузерне тестування

Налаштуйте WebDriver для роботи з різними браузерами, щоб забезпечити сумісність інтерфейсу на Chrome, Firefox та інших.

📊 Звіти про виконання тестів

Використовуйте вбудовану функціональність TestNG reports для перегляду результатів виконання тестів у вигляді HTML-звітів.

🔄 Data-driven testing

Застосовуйте анотацію @DataProvider у TestNG для тестування з кількома наборами даних (наприклад, різні комбінації логінів і паролів).

6. Поради щодо написання якісних тестів

DRY (Don’t Repeat Yourself): повторюваний код винесіть в утиліти або базові класи.

Page Object Pattern: створюйте окремі класи для сторінок (LoginPage, DashboardPage і т.д.), щоб тести були читабельнішими.

Логування: додавайте логування (через log4j чи slf4j) для зручного дебагу.

7. Обробка очікувань (Waits)

Selenium працює швидко, але сторінка — не завжди. Щоб уникнути помилок через “елемент не знайдено”, додавайте:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));

Рекомендовано:

  • Уникати Thread.sleep()
  • Використовувати WebDriverWait або FluentWait

Висновок

Автоматизація тестування сторінки входу — це ключовий крок у забезпеченні надійності вебзастосунку. Завдяки комбінації Java, Selenium WebDriver та TestNG можна створити гнучкі, масштабовані й ефективні тестові сценарії, які охоплюють як позитивні, так і негативні кейси. Правильно структурований проєкт, використання шаблону Page Object та підключення до CI/CD забезпечують зручність підтримки тестів і їхню регулярну перевірку.

Цей підхід не лише зменшує ризик помилок у продакшн-середовищі, а й значно економить час QA-команди, дозволяючи зосередитися на більш складних сценаріях. У майбутньому ви можете розширити тестову інфраструктуру додатковими інструментами — такими як Allure, Selenium Grid чи BrowserStack — для ще кращого покриття і гнучкості.

Автоматизуйте розумно, тестуйте регулярно — і ваші користувачі будуть вам вдячні! 😊