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

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

***

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

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** применяются как вспомогательные.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/teoriya-avtomatizirovannogo-testirovaniya/obshie-voprosy/kakie-vidy-lokatorov-stranicy-sushestvuyut-kakovy-ikh-preimushestva-i-nedostatki.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
