← Назад к вопросам

Какие использовал локаторы?

1.0 Junior🔥 281 комментариев
#Selenium и UI автоматизация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Локаторы (Locators) в автотестировании

Определение

Локатор — это способ найти элемент на странице для взаимодействия с ним в тестах.

Основные типы локаторов

1. ID (Самый надежный)

from selenium.webdriver.common.by import By
element = driver.find_element(By.ID, "submit-button")

Плюсы: Быстро, уникален, надежен Минусы: Не всегда есть, может быть динамический

2. Name

element = driver.find_element(By.NAME, "email")

Плюсы: Часто есть у form элементов Минусы: Может дублироваться

3. CSS Selector (Best Practice)

# По ID
element = driver.find_element(By.CSS_SELECTOR, "#submit-button")

# По классу
element = driver.find_element(By.CSS_SELECTOR, ".btn-primary")

# По атрибуту
element = driver.find_element(By.CSS_SELECTOR, "input[type=email]")

# Комбинированный
element = driver.find_element(By.CSS_SELECTOR, "form .btn-primary")

# По data атрибуту
element = driver.find_element(By.CSS_SELECTOR, "[data-testid=submit]")

Плюсы: Гибкий, быстрый, стабильный Минусы: Может быть сложный синтаксис

4. XPath (Мощный, но медленный)

# По атрибуту
element = driver.find_element(By.XPATH, "//button[@type=submit]")

# По тексту
element = driver.find_element(By.XPATH, "//button[text()=Login]")

# Содержит текст
element = driver.find_element(By.XPATH, "//button[contains(text(),Log)]")

# И условия
element = driver.find_element(By.XPATH, "//input[@type=text and @name=username]")

# Относительно родителя
element = driver.find_element(By.XPATH, "//form//input[@name=email]")

Плюсы: Самый мощный, работает с текстом, может навигировать по родителям Минусы: Хрупкий, медленный, сложный синтаксис

5. Class Name

element = driver.find_element(By.CLASS_NAME, "btn-primary")

Плюсы: Просто Минусы: Хрупкий, много элементов

6. Tag Name

element = driver.find_element(By.TAG_NAME, "button")
elements = driver.find_elements(By.TAG_NAME, "input")

Плюсы: Просто Минусы: Очень неспецифичный

7. Link Text

element = driver.find_element(By.LINK_TEXT, "Logout")
element = driver.find_element(By.PARTIAL_LINK_TEXT, "out")

Плюсы: Идеально для ссылок Минусы: Только для ссылок, зависит от текста

Приоритет выбора локаторов

1. ID (если есть)
2. Name (для form элементов)
3. CSS Selector (стабильный и быстрый)
4. Data-атрибуты (data-testid)
5. XPath (последняя опция)
6. Избегать: Class Name, Tag Name

Best Practices

✅ Хорошие локаторы:

  • #submit-btn — уникальный ID
  • [data-testid=login] — специальный атрибут
  • form.login .btn-primary — стабильный CSS
  • //button[@type=submit] — XPath с атрибутом

❌ Плохие локаторы:

  • /html/body/div[1]/div[2]/button — абсолютный XPath (очень хрупкий)
  • .btn — слишком общий класс
  • //button[text()=Click] — зависит от текста
  • Без четкого селектора

Рекомендации

  • Просите разработчиков добавить data-testid атрибуты для тестирования
  • Используйте CSS для основных локаторов (быстро и надежно)
  • XPath только когда CSS не справляется
  • Избегайте локаторов, зависящих от текста и позиции
  • Документируйте почему выбран конкретный локатор

Резюме

Основной стек локаторов:

  • ID → Name → CSS Selector → Data-атрибут → XPath

Этот приоритет обеспечивает скорость, надежность и простоту поддержки тестов.