Ответ
Селекторы в UI-автоматизации (например, в Selenium, Cypress, Playwright) — это локаторы, которые позволяют инструменту автоматизации однозначно находить и взаимодействовать с элементами на веб-странице (кнопки, поля ввода, div-блоки).
| Основные типы селекторов: | Тип | Пример (Selenium WebDriver) | Плюсы / Минусы |
|---|---|---|---|
| By.ID | driver.find_element(By.ID, "submit-btn") |
Самый быстрый и надежный, если ID уникален. | |
| By.CSS_SELECTOR | driver.find_element(By.CSS_SELECTOR, ".primary.button") |
Быстрый, гибкий синтаксис, знакомый фронтенд-разработчикам. | |
| By.XPATH | driver.find_element(By.XPATH, "//button[@type='submit']") |
Максимальная гибкость (поиск по тексту, вверх/вниз по DOM), но может быть медленным и хрупким. | |
| By.NAME | driver.find_element(By.NAME, "username") |
Хорош для полей форм. | |
| By.CLASS_NAME | driver.find_element(By.CLASS_NAME, "alert") |
Просто, но классы часто не уникальны. |
Лучшие практики выбора селекторов:
- Приоритет:
ID>data-*атрибуты >CSS Selector>XPath. - Стабильность: Используйте уникальные, статические атрибуты. Избегайте селекторов, зависящих от порядка элементов (например,
div:nth-child(3)) или текста, который может быть переведен. - Читаемость: Делайте селекторы понятными. Для сложных элементов можно использовать
data-testid.# Хороший пример: использование data-атрибута для тестирования login_button = driver.find_element(By.CSS_SELECTOR, "[data-testid='login-submit']")
Плохой пример: хрупкий XPath, зависящий от структуры
login_button = driver.find_element(By.XPATH, "/html/body/div[2]/div[3]/button[1]")
**Важно:** Для динамических элементов всегда используйте **явные ожидания (Explicit Waits)**.