Обязан ли Selenium WebDriver открывать видимое окно браузера для выполнения тестов?

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

Ответ

Нет, не обязан. Selenium WebDriver может запускать браузер в headless-режиме (без графического интерфейса). Это стандартная и часто рекомендуемая практика, особенно в CI/CD-окружении.

Как это работает: Headless-браузер выполняет всю ту же работу (рендеринг HTML, выполнение JavaScript), но не отображает окно на экране. Это делает выполнение тестов быстрее и менее ресурсоемким.

Настройка headless-режима (Java + Selenium 4):

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class HeadlessTest {
    public static void main(String[] args) {
        // Создание объекта опций для Chrome
        ChromeOptions options = new ChromeOptions();

        // Включение headless-режима (основной способ)
        options.addArguments("--headless=new"); // Новая реализация в Chrome 109+
        // Альтернативно для совместимости: options.addArguments("--headless");

        // Дополнительные полезные аргументы для стабильности в CI
        options.addArguments("--no-sandbox"); // Часто требуется на Linux/CI
        options.addArguments("--disable-dev-shm-usage"); // Решает проблемы с памятью
        options.addArguments("--disable-gpu"); // Для Windows
        options.addArguments("--window-size=1920,1080"); // Установка размера "виртуального" окна

        // Инициализация драйвера с переданными опциями
        WebDriver driver = new ChromeDriver(options);

        driver.get("https://example.com");
        System.out.println("Заголовок страницы: " + driver.getTitle());

        driver.quit();
    }
}

Плюсы headless-режима:

  • Скорость: Выполнение тестов происходит быстрее, так как не тратятся ресурсы на отрисовку UI.
  • Стабильность в CI/CD: Пайплайны часто работают на серверах без графической подсистемы (GUI). Headless-режим — единственный вариант.
  • Параллелизм: Легче запускать множество тестовых сессий одновременно на одной машине.
  • Экономия ресурсов: Меньшее потребление оперативной памяти и CPU.

Когда использовать видимый браузер (не-headless):

  • Отладка и разработка тестов: Наблюдение за тем, что именно происходит в браузере.
  • Визуальная проверка (Visual Testing): Для скриншот-тестирования, хотя многие инструменты (например, Selenium 4) умеют делать скриншоты и в headless.
  • Тестирование специфичного поведения, связанного с рендерингом или анимациями, которые могут по-разному работать в headless-режиме (редкий случай).

Вывод для QA-инженера: В CI-пайплайне тесты должны выполняться в headless-режиме для эффективности. Локально можно переключаться между режимами для удобства отладки.