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 }