Ответ
Локаторы — это стратегии, которые Selenium WebDriver использует для поиска элементов на веб-странице. Основные типы, доступные через класс By:
By.id("elementId")— поиск по уникальному атрибутуid. Самый предпочтительный и надежный локатор, если id статичен.By.name("fieldName")— поиск по атрибутуname. Часто используется для полей форм.By.className("cssClass")— поиск по значению атрибутаclass. Может вернуть несколько элементов.By.tagName("div")— поиск по HTML-тегу (div,input,a).By.linkText("Полный текст ссылки")— поиск гиперссылки (<a>) по точному тексту.By.partialLinkText("часть текста")— поиск ссылки по части ее текста.By.cssSelector("div.content > input[type='text']")— поиск по CSS-селектору. Мощный и производительный способ.By.xpath("//div[@id='main']//a[contains(text(),'Click')]")— поиск по XPath выражению. Максимальная гибкость, но может быть медленным и хрупким.
Рекомендации по выбору локатора (приоритет):
id(если он уникален и не динамический).- *`data-
атрибуты** черезcssSelector(например,[data-qa="login-button"]`). Это лучшая практика для тестирования. nameдля полей форм.cssSelector— обычно быстрее и читаемее, чем XPath для сложных случаев.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 атрибутов для ключевых элементов.