Ответ
Нет, не обязан. 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-режиме для эффективности. Локально можно переключаться между режимами для удобства отладки.