Selenium — мощный инструмент автоматизации, позволяющий работать с веб-приложениями так же, как реальный пользователь. Хотя в Selenium очень много функциональных возможностей, далеко не все из них реально понадобятся.
Локаторы
Локаторы Selenium — средства идентификации веб-элементов на странице. К ним относятся:
- ID: поиск по уникальному ID-атрибуту элемента.
- Имя класса: Выбор элементов по их class-атрибуту.
- XPath: Мощный язык навигации по XML-документам, используется для поиска элементов в HTML.
- CSS: Подобно XPath, CSS-селекторы используются для поиска элементов на основе их стилей.
// Example: Using XPath to locate an element
WebElement element = driver.findElement(By.xpath("//input[@id='username']"));
Работа с элементами
После того как вы нашли элемент, можно применять различные методы для взаимодействия с ним:
- click(): Имитирует нажатие на элемент, вызывая связанные с ним действия.
- sendKeys(): Вводит текст в поля ввода.
- getText(): Передает видимый текст элемента.
Изучение этих 3 базовых взаимодействий позволит моделировать большинство действий пользователей и тестировать поведение веб-приложений.
// Example: Clicking a button
WebElement button = driver.findElement(By.id("submitBtn"));
button.click();
//you can use it like
button.sendkeys("Try another")
button.getText()
Алерты и всплывающие окна
В веб-приложениях часто используются JavaScript-оповещения (алерты) или всплывающие окна для передачи пользователю сообщений (уведомлений/ оповещений) или сбора введенных пользователем данных.
Selenium предоставляет интерфейс Alert для работы с такими сценариями. Можно использовать такие методы, как accept(), чтобы нажать кнопку OK на оповещении, или dismiss(), чтобы нажать кнопку Отмена.
Обработка оповещений очень важна для сценариев, в которых взаимодействие с всплывающими окнами является частью главного потока приложения (то есть практически всегда).
// Example: Handling an alert Alert alert = driver.switchTo().alert(); String alertText = alert.getText(); alert.accept();
Ожидания
Синхронизация — тоже важный аспект автоматизации в Selenium. Если ваш скрипт попытается взаимодействовать с элементом до того, как он будет полностью загружен, может возникнуть ошибка. В Selenium два типа ожиданий:
- Неявное ожидание (Implicit wait): ожидает определенный период времени, прежде чем выбросить исключение.
- Явное ожидание (Explicit wait): ожидание определенного условия перед выполнением действия.
Использование явных ожиданий с условиями (например elementToBeClickable или visibilityOfElementLocated) гарантирует, что скрипт будет взаимодействовать с элементами только тогда, когда они будут готовы.
// Example: Explicit wait for an element to be clickable
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("submitButton")));
element.click();
Data-Driven подход
Тестирование, управляемое данными (Data-Driven Testing) — это методология, в которой тестовые данные отделены от тестовых сценариев. Вместо жесткого прописывания (хардкодинга) входных данных в сценариях — вы параметризуете тесты (практический пример параметризации), что позволяет запускать один и тот же тест с разными наборами данных.
Такие фреймворки, как TestNG или JUnit, предоставляют аннотации и другие функции для внедрения тестирования, управляемого данными. Отделяя тестовые данные от логики тестирования в рамках TDD-подхода, вы улучшаете сопровождаемость тестов (maintainability) и повышаете тестовое покрытие.
// Example: Data-driven test using TestNG
@DataProvider(name = "userCredentials")
public Object[][] provideUserData() {
return new Object[][]{
{"user1", "password1"},
{"user2", "password2"}
};
}
@Test(dataProvider = "userCredentials")
public void loginTest(String username, String password) {
// Perform login with provided credentials
}