Java: Selenium

Теория: Локаторы

Локаторы определяют, как Selenium находит элементы на странице. От качества локаторов зависит стабильность тестов. В этом уроке мы разберем основные способы поиска и критерии надежных локаторов.

Базовые локаторы

Чаще всего используются By.id, By.cssSelector и By.xpath:

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

class LocatorsTest {
    @Test
    void findElements() {
        var driver = new ChromeDriver();
        driver.get("https://example.com");

        var loginButton = driver.findElement(By.id("login-button"));
        var header = driver.findElement(By.cssSelector(".page-header h1"));
        var link = driver.findElement(By.xpath("//a[text()='Profile']"));

        driver.quit();
    }
}

By.id обычно самый надежный. CSS‑селекторы удобны и читаемы. XPath полезен, когда нужна более сложная логика поиска.

Поиск внутри других элементов

Иногда удобно ограничить область поиска конкретным блоком:

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

class ScopedSearchTest {
    @Test
    void findInsideBlock() {
        var driver = new ChromeDriver();
        driver.get("https://example.com/login");

        var form = driver.findElement(By.cssSelector("form.login"));
        var username = form.findElement(By.name("username"));

        driver.quit();
    }
}

Так тест становится устойчивее: мы ищем элементы внутри конкретной формы, а не по всей странице.

Надежные локаторы

Хороший локатор:

  • Уникален
  • Не зависит от верстки и структуры
  • Не ломается при небольших правках дизайна

Часто используют специальные атрибуты вроде data-testid:

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

class TestIdLocatorTest {
    @Test
    void findByTestId() {
        var driver = new ChromeDriver();
        driver.get("https://example.com/login");

        var submit = driver.findElement(By.cssSelector("[data-testid='submit']"));

        driver.quit();
    }
}

Примеры плохих локаторов

Проблемные варианты:

  • По глубокой структуре: div > div > div > button
  • По индексу: //div[4]/button
  • По классу, который часто меняется

Такие локаторы ломаются при любом изменении верстки. Лучше сразу договориться о стабильных атрибутах или использовать id.

Рекомендуемые программы

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845