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

В веб-тестировании (Selenium, Playwright, Cypress и др.) локаторы — это способы нахождения элементов на веб-странице.


🔑 Виды локаторов:

  1. ID

    • Пример: driver.find_element(By.ID, "username")

    • Преимущества: уникальный, быстрый, самый надёжный способ.

    • Недостатки: не всегда есть на элементе, может меняться при обновлении фронта.

  2. Name

    • Пример: driver.find_element(By.NAME, "email")

    • Плюсы: читаемый, часто используется для input-ов (форм).

    • Минусы: может быть неуникальным → вернёт первый попавшийся элемент.

  3. Class Name

    • Пример: driver.find_element(By.CLASS_NAME, "btn-primary")

    • Плюсы: удобно, если класс уникален.

    • Минусы: классов может быть несколько, часто генерируются автоматически (BEM, Tailwind, Bootstrap).

  4. Tag Name

    • Пример: driver.find_element(By.TAG_NAME, "input")

    • Плюсы: просто для поиска группы элементов.

    • Минусы: редко уникален, почти всегда требует уточнения.

  5. Link Text / Partial Link Text

    • Пример:

      • Полный: driver.find_element(By.LINK_TEXT, "Forgot password?")

      • Частичный: driver.find_element(By.PARTIAL_LINK_TEXT, "Forgot")

    • Плюсы: удобно для ссылок и кнопок-ссылок.

    • Минусы: зависит от текста → при локализации/редизайне ломается.

  6. CSS Selector

    • Пример: driver.find_element(By.CSS_SELECTOR, "div.login input[type='text']")

    • Плюсы: мощный, быстрый, поддерживает сложные комбинации.

    • Минусы: может быть хрупким, если вёрстка часто меняется.

  7. XPath

    • Пример: driver.find_element(By.XPATH, "//div[@id='login']//input[@name='username']")

    • Плюсы: гибкий, можно строить сложные выражения, двигаться по DOM (родитель → потомок).

    • Минусы: длинный, менее читаемый, более медленный, чем CSS.


⚖️ Итог:

  • Лучше всего использовать: ID (если есть).

  • Хорошая альтернатива: CSS Selector.

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

  • Name / Class / Tag / Link Text применяются как вспомогательные.

Last updated

Was this helpful?