← Назад к вопросам

Что нового в Selenium 4?

1.8 Middle🔥 181 комментариев
#Теория тестирования#Фреймворки тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Отличный вопрос! Selenium 4 принес множество значимых улучшений, которые меняют подход к автоматизации веб-тестирования. Я выделю ключевые нововведения, которые должен знать каждый QA Automation инженер.

🔧 Ключевые архитектурные и протокольные изменения

Стандартизация на W3C WebDriver Protocol

Это фундаментальное изменение. Вместо устаревшего протокола JSON Wire Protocol Selenium 4 теперь использует стандартный W3C WebDriver протокол по умолчанию. Это обеспечивает:

  • Большую стабильность и предсказуемость взаимодействия между клиентом (вашим кодом) и браузером.
  • Совместимость между разными браузерами, так как все основные вендоры (Chrome, Firefox, Edge, Safari) следуют одному стандарту.
  • Устранение множества "костылей" и несовместимостей из Selenium 3.
  • Для старых драйверов, не поддерживающих W3C, Selenium 4 автоматически переключается на совместимый режим.

🚀 Новые возможности и API

1. Относительные локаторы (Relative Locators)

Мощное дополнение для поиска элементов относительно других элементов. Это альтернатива сложным XPath и помогает создавать более устойчивые селекторы.

// Пример на Java
import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement passwordField = driver.findElement(By.id("password"));
// Найти поле ввода ВЫШЕ поля password
WebElement emailField = driver.findElement(with(By.tagName("input")).above(passwordField));

Доступны 5 позиций: above(), below(), toLeftOf(), toRightOf(), near() (в радиусе ~50px).

2. Новый объект ChromiumDriver и DevTools Protocol

Вместо прямого использования ChromeDriver можно работать через общий интерфейс ChromiumDriver (для Chrome и Edge). Главное — прямая интеграция с Chrome DevTools Protocol (CDP), что открывает возможности, недоступные ранее:

// Пример: Перехват сетевых запросов и извлечение данных
DevTools devTools = ((ChromiumDriver) driver).getDevTools();
devTools.createSession();

devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

// Добавление слушателя на все ответы
devTools.addListener(Network.responseReceived(),
        response -> {
            if(response.getResponse().getUrl().contains("/api/data")) {
                System.out.println("Response Status: " + response.getResponse().getStatus());
                System.out.println("Response Body: " + devTools.send(Network.getResponseBody(response.getRequestId())).getBody());
            }
        });

С помощью CDP можно:

  • Эмулировать геолокацию, время, ориентацию устройства.
  • Эмулировать сетевые условия (оффлайн, медленное соединение).
  • Перехватывать и модифицировать сетевые запросы/ответы.
  • Выполнять JavaScript на уровне отладчика (например, для мониторинга производительности).

3. Улучшенное управление окнами и вкладками

  • Новые методы driver.getWindowHandle() и driver.getWindowHandles() возвращают WindowType.WINDOW или WindowType.TAB.
  • Простое создание новой вкладки или окна: driver.switchTo().newWindow(WindowType.TAB);.
  • Улучшенная совместимость при переключении контекстов.

4. Новые методы для ожиданий (Waits)

Появились методы, не требующие явного указания времени ожидания (FluentWait остается, но эти методы удобнее для частых задач):

// Ждать загрузки страницы полностью (событие `document.readyState` == "complete")
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(10));

// Selenium 4 предоставляет более удобные ожидания через ExpectedConditions
WebElement element = driver.findElement(By.id("dynamic"));
// Ожидание, что элемент станет видимым (уже есть в Selenium 3, но улучшено)
new WebDriverWait(driver, Duration.ofSeconds(5)).until(ExpectedConditions.visibilityOf(element));

📊 Улучшенный Selenium Grid

Selenium Grid 4 (полный редизайн)

Полностью переписан на основе Docker-ориентированной, модульной архитектуры. Основные компоненты:

  • Router (selenium/router): Маршрутизирует запросы.
  • Distributor (selenium/distributor): Управляет узлами (Nodes).
  • Session Map (selenium/sessions): Хранит информацию о сессиях.
  • Node (selenium/node): Запускает браузеры.
  • Event Bus (selenium/event-bus): Коммуникационная шина.

Преимущества новой Grid:

  • Горизонтальная масштабируемость: Легко добавлять новые узлы.
  • Отказоустойчивость: Компоненты независимы.
  • Поддержка Docker: Официальные образы упрощают развертывание.
  • Мониторинг: Встроенные эндпоинты для мониторинга (/readyz, /livez, /metrics).
  • Упрощенный запуск: Для локальной разработки теперь можно запустить всё одной командой:
    java -jar selenium-server.jar standalone
    

🛠 Изменения в синтаксисе и важные замечания

Обновление синтаксиса управления окнами

Старый метод driver.manage().window().setPosition() и setSize() объединены в один метод setRect():

// Selenium 3
driver.manage().window().setPosition(new Point(10, 10));
driver.manage().window().setSize(new Dimension(1024, 768));

// Selenium 4 (новый синтаксис)
driver.manage().window().setRect(new Rectangle(10, 10, 1024, 768));

Устаревание и удаление устаревших API

Были удалены устаревшие методы, такие как DesiredCapabilities (вместо них используются Options классы: ChromeOptions, FirefoxOptions и т.д.).

// Selenium 3 (устарело)
DesiredCapabilities caps = DesiredCapabilities.chrome();

// Selenium 4 (рекомендуемый подход)
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
WebDriver driver = new ChromeDriver(options);

💡 Практические рекомендации для перехода

  1. Обновите зависимости в pom.xml (Maven) или build.gradle (Gradle) до версии 4.x.
  2. Замените DesiredCapabilities на соответствующие классы *Options.
  3. Протестируйте относительные локаторы там, где XPath/CSS слишком сложны.
  4. Изучите возможности CDP для сложных сценариев (сеть, производительность, эмуляция).
  5. Для Selenium Grid планируйте переход на новую архитектуру — она требует пересмотра процесса развертывания, но дает больше гибкости.
  6. Будьте готовы к изменениям в синтаксисе некоторых методов (особенно связанных с размером/позицией окон).

Итог: Selenium 4 — это не просто обновление версии, а серьезный эволюционный шаг. Он делает фреймворк более стабильным (благодаря W3C), мощным (через интеграцию с DevTools) и масштабируемым (новая Grid-архитектура). Хотя переход с Selenium 3 в большинстве случаев не требует полного переписывания тестов, инвестиции в изучение и внедрение новых возможностей окупаются повышением надежности и расширением спектра автоматизируемых сценариев.

Что нового в Selenium 4? | PrepBro