Можно ли добавлять кастомные HTTP-заголовки (Header) к запросам в Selenium WebDriver?

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

Ответ

Да, это возможно, но не напрямую через стандартный API WebDriver. Для этого требуются дополнительные инструменты, которые позволяют перехватывать и модифицировать сетевой трафик браузера.

Основные подходы:

  1. Использование прокси (например, BrowserMob Proxy): Прокси-сервер устанавливается между браузером и сервером, позволяя добавлять или изменять заголовки.

    // Пример с BrowserMob Proxy (Java)
    BrowserMobProxy proxy = new BrowserMobProxyServer();
    proxy.start(0);
    proxy.addRequestFilter((request, contents, messageInfo) -> {
        request.headers().add("X-Custom-Header", "MyValue");
        return null;
    });
    
    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
    ChromeOptions options = new ChromeOptions();
    options.setProxy(seleniumProxy);
    WebDriver driver = new ChromeDriver(options);
  2. Использование DevTools Protocol (Chrome/Edge): Современный способ через CDP API, встроенный в Selenium 4+.

    // Пример для Chrome (Java, Selenium 4+)
    ChromeDriver driver = new ChromeDriver();
    DevTools devTools = driver.getDevTools();
    devTools.createSession();
    // Включаем перехват сети
    devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
    // Устанавливаем дополнительные заголовки для всех запросов
    Map<String, Object> headers = new HashMap<>();
    headers.put("X-Auth-Token", "secret-token-123");
    devTools.send(Network.setExtraHTTPHeaders(new Headers(headers)));

Важные замечания для QA-инженера:

  • Цель: Чаще всего это нужно для тестирования API-интеграций, эмуляции мобильных заголовков или передачи токенов аутентификации прямо в браузерный контекст.
  • Ограничения: Не все браузеры одинаково хорошо поддерживают эту функциональность. Модификация заголовков может сломать логику сайта (например, проверку CSRF-токенов).
  • Альтернатива: Для чистого тестирования API с кастомными заголовками часто лучше использовать специализированные библиотеки (RestAssured, Retrofit) вместо WebDriver.