Цей покроковий посібник допоможе вам автоматизувати тестування сторінки входу до вебзастосунку за допомогою Java, Selenium WebDriver та TestNG. У рамках проєкту ви створите тестові кейси для перевірки помилок валідації, коректності введення даних та сценаріїв успішного входу.
Технології та інструменти
- Мова програмування: Java
- Інструмент автоматизації: Selenium WebDriver
- Фреймворк для тестування: TestNG
- Браузери: Google Chrome, Mozilla Firefox
- Середовище розробки (IDE): IntelliJ IDEA або Eclipse
- Система збирання: Maven (для управління залежностями)
Етапи реалізації проєкту
1. Налаштування середовища
- Встановіть Java та налаштуйте змінну середовища
JAVA_HOME
. - Завантажте відповідний WebDriver для браузера, наприклад:
- ChromeDriver — для Google Chrome
- GeckoDriver — для Mozilla Firefox
- Встановіть TestNG.
- Створіть 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 — для ще кращого покриття і гнучкості.
Автоматизуйте розумно, тестуйте регулярно — і ваші користувачі будуть вам вдячні! 😊