Ответ
Да, я использовал Selenium WebDriver для автоматизации UI-тестов веб-приложений. Мой основной стек — Java, Selenium, TestNG/JUnit, Maven/Gradle с обязательным применением Page Object Model (POM) для поддержания читаемости и реюзабельности кода.
Ключевые практики, которые я применяю:
- Page Object Model: Каждая страница или значимый компонент представлен отдельным классом, что изолирует локаторы и действия.
- Explicit Waits: Использую
WebDriverWaitдля ожидания элементов, что делает тесты стабильнее. - Параллельный запуск: Настраивал Selenium Grid или использовал возможности TestNG для параллельного выполнения тестов в разных браузерах.
- Интеграция с системами отчетности: Настраивал генерацию подробных отчетов через 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 с более лаконичным синтаксисом.