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

«Какие знаешь типы локаторов в Selenium?» — вопрос из категории Selenium и Selenide, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Локаторы — это стратегии, которые Selenium WebDriver использует для поиска элементов на веб-странице. Основные типы, доступные через класс By:

  1. By.id("elementId") — поиск по уникальному атрибуту id. Самый предпочтительный и надежный локатор, если id статичен.
  2. By.name("fieldName") — поиск по атрибуту name. Часто используется для полей форм.
  3. By.className("cssClass") — поиск по значению атрибута class. Может вернуть несколько элементов.
  4. By.tagName("div") — поиск по HTML-тегу (div, input, a).
  5. By.linkText("Полный текст ссылки") — поиск гиперссылки (<a>) по точному тексту.
  6. By.partialLinkText("часть текста") — поиск ссылки по части ее текста.
  7. By.cssSelector("div.content > input[type='text']") — поиск по CSS-селектору. Мощный и производительный способ.
  8. By.xpath("//div[@id='main']//a[contains(text(),'Click')]") — поиск по XPath выражению. Максимальная гибкость, но может быть медленным и хрупким.

Рекомендации по выбору локатора (приоритет):

  1. id (если он уникален и не динамический).
  2. *`data-атрибуты** черезcssSelector(например,[data-qa="login-button"]`). Это лучшая практика для тестирования.
  3. name для полей форм.
  4. cssSelector — обычно быстрее и читаемее, чем XPath для сложных случаев.
  5. xpath — как последнее средство, когда другие способы не работают (например, нужна логика по тексту).

Пример в Selenide (более лаконичный синтаксис):

import static com.codeborne.selenide.Selenide.*;
import static com.codeborne.selenide.Selectors.*;

// Эквиваленты в Selenide
$("#username").setValue("test"); // By.id
$(byName("password")).setValue("123"); // By.name
$(byXpath("//button[text()='Login']")).click(); // By.xpath
$("[data-test='submit-btn']").click(); // cssSelector по data-атрибуту
$(byText("Complete registration")).click(); // Удобный метод Selenide по тексту

Важно для стабильности тестов: Избегайте хрупких локаторов, зависящих от структуры DOM (например, //div[3]/span[2]/a), верстки или динамически генерируемых идентификаторов. Договаривайтесь с разработчиками о добавлении data-qa или data-testid атрибутов для ключевых элементов.