ENIGMA AI
ENIGMA AI

Какие существуют механизмы локаторов в автоматизированном тестировании?

встречается 1× Selenium junior testing

Как ответить

В Selenium WebDriver есть восемь встроенных механизмов поиска элементов, реализованных через класс By. На практике чаще всего применяют id, CSS-селекторы и XPath. Для джуниора важно знать все типы и понимать, какой выбирать в зависимости от ситуации.

  • By.id() — самый быстрый и надёжный. Если у элемента есть уникальный id — используйте его.
  • By.name() — работает, если задан атрибут name. Часто встречается в формах.
  • By.className() — поиск по значению класса. Если классов несколько, сработает только первое слово.
  • By.tagName() — поиск по HTML-тегу (div, input). Обычно используется в связке с findElements.
  • By.linkText() и By.partialLinkText() — только для ссылок (<a>). Точное или частичное совпадение текста.
  • By.cssSelector() — гибкий синтаксис CSS. Примеры: #myid, .myclass, div > input[type='text']. Работает быстрее XPath.
  • By.xpath() — самый мощный, но медленный. Позволяет искать по тексту, атрибутам, положению. Важно различать абсолютный (/html/body/div[1]) и относительный (//div[@id='form']//button) XPath. Относительный — предпочтительнее, он устойчивее к изменениям DOM.

На собеседовании от джуниора ожидают, что он перечислит все 8, объяснит приоритет выбора (id > CSS > XPath) и упомянет, почему стоит избегать индексов и привязки к тексту, который может меняться. Также полезно показать примеры кода:

from selenium.webdriver.common.by import By

driver.find_element(By.ID, "submit")
driver.find_element(By.NAME, "email")
driver.find_element(By.CLASS_NAME, "btn-primary")
driver.find_element(By.TAG_NAME, "form")
driver.find_element(By.LINK_TEXT, "Войти")
driver.find_element(By.CSS_SELECTOR, "#submit")
driver.find_element(By.XPATH, "//input[@type='submit']")

Ещё один важный момент — разница между findElement и findElements. Первое кидает NoSuchElementException, если элемент не найден, второе возвращает пустой список. Это нужно учитывать при написании стабильных тестов.

Ключевые тезисы

  • В Selenium 8 типов локаторов: id, name, className, tagName, linkText, partialLinkText, cssSelector, xpath.
  • Приоритет: id самый надёжный и быстрый, затем CSS-селекторы, затем XPath.
  • В XPath важно использовать относительные пути вместо абсолютных — так локаторы меньше ломаются при изменении структуры страницы.
  • Избегайте индексов и привязки к тексту, который может динамически меняться. Лучше опираться на уникальные атрибуты или комбинацию родитель-потомок.
  • findElement выбрасывает исключение при отсутствии элемента, а findElements возвращает пустой список — это влияет на логику ожиданий и проверок.

Что спросят дальше

  • — Какой локатор вы выберете для элемента, который появляется только после клика по кнопке? (Ожидается, что кандидат свяжет с ожиданиями — явные/неявные, а не только с типом локатора)
  • — В чём разница между XPath и CSS-селектором по производительности? (XPath медленнее, особенно с //*; CSS обычно быстрее, но для большинства тестов разница несущественна)
  • — Напишите XPath для элемента &lt;button class="btn"&gt;Отправить&lt;/button&gt;, если у него нет id. (Варианты: //button[text()='Отправить'] или //button[@class='btn'])

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение