Какие локаторы чаще всего используешь в Selenium/Selenide?

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

Ответ

При написании UI-автотестов я выбираю локаторы, руководствуясь принципами стабильности, производительности и читаемости. Вот мой порядок предпочтения:

  1. ID – самый быстрый и предпочтительный, если разработчики проставляют уникальные и стабильные id.

    // Selenium
    driver.findElement(By.id("submit-button"));
    // Selenide
    $("#submit-button").click();
  2. CSS Selector – мой основной инструмент для сложных случаев. Он быстрый, гибкий и хорошо читается.

    // Поиск кнопки с конкретным классом внутри формы
    $(byCss("form.user-form > button.primary")).shouldBe(visible);
  3. XPath – использую в крайних случаях, когда невозможно составить CSS-селектор (например, для навигации по тексту или сложной иерархии). Стараюсь избегать слишком длинных и хрупких XPath.

    // Поиск элемента по тексту (когда это необходимо)
    $(byXpath("//button[contains(text(),'Save')]")).click();
  4. Атрибут data-testid или data-qa – это лучшая практика. Мы договариваемся с фронтенд-разработчиками добавлять специальные атрибуты для тестов, что делает локаторы независимыми от изменений в верстке.

    $(by("data-testid", "login-submit-btn")).click();

Почему такой порядок? ID и data-* атрибуты создают самую прочную связь с элементом. CSS-селекторы — отличный баланс мощности и скорости. XPath может быть медленнее на больших страницах, и его сложнее поддерживать. Я всегда комбинирую локаторы с явными ожиданиями (WebDriverWait в Selenium или команды should() в Selenide), чтобы тесты были устойчивы к задержкам загрузки.