Что такое селекторы в автоматизации тестирования UI?

«Что такое селекторы в автоматизации тестирования UI?» — вопрос из категории Автоматизация тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Селекторы в 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") Просто, но классы часто не уникальны.

Лучшие практики выбора селекторов:

  1. Приоритет: ID > data-* атрибуты > CSS Selector > XPath.
  2. Стабильность: Используйте уникальные, статические атрибуты. Избегайте селекторов, зависящих от порядка элементов (например, div:nth-child(3)) или текста, который может быть переведен.
  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)**.