Как можно найти элемент на странице в Selenium?

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

Ответ

В Selenium WebDriver для поиска элементов используются локаторы. Основные методы, доступные через By:

Основные локаторы:

  1. By.id("elementId") - самый надежный и быстрый способ, если у элемента есть уникальный id.
  2. By.cssSelector(".class-name") - гибкий и производительный. Позволяет использовать селекторы как в CSS.
  3. By.xpath("//div[@class='example']") - мощный, но может быть медленнее. Полезен для сложных навигаций (например, поиск по тексту).
  4. By.className("className") - поиск по атрибуту class.
  5. By.tagName("input") - поиск по имени HTML-тега.
  6. By.name("fieldName") - поиск по атрибуту name.
  7. By.linkText("Полный текст ссылки") и By.partialLinkText("часть текста") - для поиска гиперссылок (<a>).

Примеры кода:

// WebDriver
WebElement elementById = driver.findElement(By.id("submit-button"));
List<WebElement> elementsByCss = driver.findElements(By.cssSelector(".product-item"));

// Selenide (более лаконичный синтаксис)
SelenideElement element = $("#submit-button");
ElementsCollection products = $$(".product-item");

Ключевые практики для QA:

  • Явные ожидания: Всегда используйте WebDriverWait перед взаимодействием с элементом, чтобы избежать NoSuchElementException из-за задержек загрузки.
    new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.visibilityOfElementLocated(By.id("dynamic-element")));
  • findElement vs findElements: findElement возвращает первый найденный элемент или исключение. findElements возвращает список (пустой, если ничего не найдено).
  • Приоритет локаторов: ID > CSS Selector > XPath. XPath стоит использовать, когда другие способы не подходят (например, поиск по сложному текстовому условию).