Ответ
В Selenium WebDriver для поиска элементов используются локаторы. Основные методы, доступные через By:
Основные локаторы:
- By.id("elementId") - самый надежный и быстрый способ, если у элемента есть уникальный
id. - By.cssSelector(".class-name") - гибкий и производительный. Позволяет использовать селекторы как в CSS.
- By.xpath("//div[@class='example']") - мощный, но может быть медленнее. Полезен для сложных навигаций (например, поиск по тексту).
- By.className("className") - поиск по атрибуту
class. - By.tagName("input") - поиск по имени HTML-тега.
- By.name("fieldName") - поиск по атрибуту
name. - 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стоит использовать, когда другие способы не подходят (например, поиск по сложному текстовому условию).