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

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

1.0 Junior🔥 201 комментариев
#Автоматизация тестирования

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

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

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

Типы локаторов в автоматизации тестирования

В автоматизации тестирования, особенно при работе с веб-приложениями через Selenium WebDriver или аналогичные инструменты, локаторы (или селекторы) являются ключевым механизмом для идентификации и взаимодействия с элементами на странице. Они представляют собой строковые выражения, которые указывают на уникальный элемент в DOM (Document Object Model).

Основные типы локаторов, которые я использую и рекомендую в своей практике:

1. By.id

Локатор по уникальному атрибуту id элемента. Это самый надежный и предпочтительный тип, если разработчики предоставляют стабильные и уникальные id.

element = driver.find_element(By.ID, "login-button")

2. By.name

Локатор по атрибуту name. Часто используется для форм и их полей (input, select).

WebElement input = driver.findElement(By.name("username"));

3. By.className

Локатор по атрибуту class. Может быть проблематичным, если класс используется для нескольких элементов или является составным (несколько классов в одном атрибуте).

const elements = await driver.findElements(By.className('btn-primary'));

4. By.tagName

Локатор по типу HTML-тега (например, div, a, input). Часто возвращает несколько элементов.

links = driver.find_elements(By.TAG_NAME, "a")

5. By.linkText

Локатор для поиска гиперссылок (<a> теги) по точному тексту, который они содержат.

driver.findElement(By.linkText("Перейти в документацию"));

6. By.partialLinkText

Аналогичен linkText, но позволяет найти ссылку по части её текста.

driver.find_element(By.PARTIAL_LINK_TEXT, "документа")

7. By.cssSelector

CSS-селекторы — один из самых мощных и гибких типов локаторов. Позволяют использовать сложные комбинации атрибутов, классов, иерархии и состояния.

// Элемент с id, классом и атрибутом data-type
await driver.findElement(By.cssSelector("#container .list-item[data-type='user']"));

8. By.xpath

XPath (XML Path Language) — чрезвычайно мощный язык запросов для поиска узлов в DOM. Позволяет строить очень сложные и точные запросы, включая поиск по тексту, относительные пути и многое другое.

// Абсолютный путь
driver.findElement(By.xpath("/html/body/div[1]/form/input"));
// Относительный путь с условием
driver.findElement(By.xpath("//button[@type='submit' and contains(text(), 'Отправить')]"));

Критерии выбора и практические рекомендации

В своей работе я руководствуюсь следующими принципами при выборе типа локатора:

  • Приоритет стабильности и уникальности: By.id — первый кандидат, если id стабилен и не изменяется динамически.
  • Гибкость и мощность для сложных случаев: By.cssSelector и By.xpath используются, когда нужны сложные условия или нет уникальных атрибутов.
  • Производительность: В целом, CSS-селекторы часто работают быстрее, особенно в старых версиях браузеров, и их синтаксис обычно более компактный. XPath может быть медленнее на сложных документах, но его выразительность незаменима в некоторых ситуациях (например, поиск по тексту).
  • Читаемость и поддержка: Я стараюсь избегать чрезмерно сложных и длинных XPath, которые трудно читать и поддерживать. Локатор должен быть, в идеале, не только точным, но и понятным для других членов команды.
  • Адаптивность к изменениям: Использование комбинаций атрибутов (например, cssSelector с несколькими атрибутами) может сделать локатор более устойчивым к небольшим изменениям в структуре, чем жесткий абсолютный xpath.

Пример комбинированного подхода на практике:

# Предпочтительный порядок: id -> css -> xpath -> другие
def find_stable_element(driver):
    try:
        return driver.find_element(By.ID, "main-submit")
    except NoSuchElementException:
        # Fallback на более гибкий, но точный CSS-селектор
        return driver.find_element(By.CSS_SELECTOR, "form[action='/save'] > button.primary")

Итог: знание и правильное применение всех типов локаторов позволяет создавать стабильные, быстрые и поддерживаемые автотесты, эффективно адаптируясь к конкретной структуре и изменениям в тестируемом приложении.

Какие знаешь типы локаторов? | PrepBro