Безголовый (headless) браузер — это браузер без графического интерфейса. Он может работать в фоновом режиме, не отображая GUI, как обычные браузеры. Это эффективный способ тестирования веб-приложений, который позволяет экономить время и ресурсы. В этом руководстве мы подробно рассмотрим, что такое headless-браузер, когда следует применять такой подход в тестировании и как его использовать с помощью Selenium.
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Содержание:
- Когда следует использовать headless тестирование?
- Тестирование в headless-браузере с помощью Selenium
- Популярные headless-браузеры
- Преимущества тестирования в headless-браузере
- Недостатки тестирования в headless-браузере
- HtmlUnitDriver
- Шаги по использованию HtmlUnitDriver с Selenium на Java
- Преимущества HtmlUnitDriver
- PhantomJS
- Шаги для запуска PhantomJS с Selenium на Java
- Заключение
Когда следует использовать headless тестирование?
В современную цифровую эпоху веб-приложения разрабатываются с учетом совместимости с широким спектром устройств и платформ. Это часто становится проблемой для разработчиков сайтов, которым необходимо обеспечить корректную работу веб-приложений на всех платформах. Идеальным решением этой проблемы является тестирование в headless-браузере, позволяющее тестировать веб-приложения без графического интерфейса. В таких браузерах, разработчикам проще и быстрее тестировать сложные веб-приложения с множеством компонентов и зависимостей, а также они могут использовать их в модульном тестировании. Это позволяет ускорить разработку, обеспечить отсутствие критичных ошибок в коде и повысить удовлетворенность пользователей.
Еще headless-браузер можно использовать на машине, где нет операционной системы с GUI (только командная строка). Это ускорит время выполнения тестов и снизит нагрузку на сервер.
Headless тестирование с помощью Selenium
Selenium — это мощный инструмент для headless тестирования, позволяющий разработчикам запускать автоматизированные тесты без отображения пользовательского интерфейса. Выполняя тесты в фоновом режиме, Selenium позволяет экономить время и ресурсы, а также выявлять баги, которые могут быть незаметны при обычном тестировании с пользовательским интерфейсом. К ним относятся ошибки, связанные с производительностью, и проблемы с разметкой сайта, которые могут стать очевидными только в headless среде. Однако важно помнить об ограничениях headless тестирования и сочетать его с традиционными методами, с использованием UI, для обеспечения полного покрытия тестами.
Популярные headless-браузеры
Вот несколько примеров headless-драйверов:
Далее мы рассмотрим несколько headless-браузеров, каждый из которых обладает своими уникальными возможностями и преимуществами.
PhantomJS
PhantomJS — это headless-браузер, использующий в качестве движка для рендеринга WebKit и поддерживающий различные веб-стандарты, такие как HTML5, CSS3 и JavaScript. В нем предусмотрены функции записи экрана и автоматизации взаимодействия со страницами. Он имеет открытый исходный код и совместим с различными операционными системами.
Пример использования Headless PhantomJS c Selenium на Python.
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
# Устанавливаем PhantomJS options
phantomjs_options = webdriver.DesiredCapabilities.PHANTOMJS.copy()
phantomjs_options['phantomjs.page.settings.userAgent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
# Настраиваем PhantomJS driver
driver = webdriver.PhantomJS('/path/to/phantomjs', desired_capabilities=phantomjs_options)
# Выполняем действия, используя драйвер
driver.get('https://www.example.com')
print(driver.title)
# Закрываем драйвер
driver.quit()
Chrome
Chrome — самый популярный браузер, и в нем тоже реализована функция headless. Он может использоваться на различных платформах и поддерживает разные языки программирования и фреймворки. Встроенные средства отладки и обширная документация облегчают его использование и позволяют устранять проблемы, возникающие в процессе тестирования.
Пример Headless Chrome с Selenium на Python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Настраиваем Chrome options
chrome_options = Options()
chrome_options.add_argument('--headless') # Run Chrome in headless mode
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
# Настраиваем Chrome driver
driver = webdriver.Chrome('/path/to/chromedriver', options=chrome_options)
# Выполняем действия, используя драйвер
driver.get('https://www.example.com')
print(driver.title)
# Закрываем драйвер
driver.quit()
Firefox
Одним из преимуществ использования Firefox в качестве «безголового» браузера является его легкость, что делает его универсальным вариантом для тестирования на различных операционных системах. Кроме того, благодаря обширной документации и поддержке сообщества Firefox является отличным выбором для тех, кто хочет поэкспериментировать с технологией headless-браузера.
Пример Headless Firefox с Selenium на Python.
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# Настраиваем Firefox options
firefox_options = Options()
firefox_options.add_argument('--headless') # Run Firefox in headless mode
# Настраиваем Firefox driver
driver = webdriver.Firefox(options=firefox_options)
# Выполняем действия, используя driver
driver.get('https://www.example.com')
print(driver.title)
# Закрываем драйвер
driver.quit()
Преимущества headless тестирования
- Быстрее прогоняются тесты
- Экономически более эффективное тестирование
- Улучшенное покрытие тестами
- Гибкость при выполнении тестов
- Тестирование разметки
- Возможность интеграции с CI/CD-пайплайном
Недостатки headless тестирования
- Отсутствие графического интерфейса
- Трудности при отладке (можно уменьшить эту проблему, например используя интеграцию с отчетами со скриншотами Allure)
- Ограниченная поддержка браузеров
HtmlUnitDriver
HtmlUnitDriver — это наиболее быстрая реализация WebDriver. Он основан на HtmlUnit. Аналогичен драйверу Chrome, или Firefox, но не имеет графического интерфейса, поэтому увидеть выполнение теста на экране невозможно.
Особенности HtmlUnitDriver
- Поддержка протоколов HTTPS и HTTP
- Поддержка HTML-ответов (переход по ссылкам, отправка форм, поддержка DOM и т.д.)
- Поддержка файлов cookie
- Поддержка прокси
- Поддержка базовой и NTLM-аутентификации
- Отличная поддержка JavaScript
- Поддержка методов GET и POST
- Возможность настройки заголовков запросов, отправляемых на сервер
- Возможность определять, следует ли генерировать исключения при неудачных ответах от сервера или возвращать страницу соответствующего типа
Шаги по использованию HtmlUnitDriver с Selenium на Java
Шаг 1. Скопируйте в свою IDE (далее будет пример в Eclipse) код ниже. Добавьте в проект стандартные файлы библиотеки Selenium. Никаких дополнительных jar-файлов не потребуется.
package htmldriver;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class htmlUnitYest {
public static void main(String[] args) {
// Создаем новый экземпляр HtmlUnitDriver
WebDriver driver = new HtmlUnitDriver();
// Переходим на Google
driver.get("http://www.google.com");
// Находим строку поиска, используя name
WebElement element = driver.findElement(By.name("q"));
// Вводим поисковый запрос
element.sendKeys("Guru99");
// Отправляем запрос.
// Webdriver автоматически найдет кнопку отправки, используя
// текстовый input. Не нужно использовать локаторы, для submit
element.submit();
// Выводим в консоль title страницы
System.out.println("Page title is: " + driver.getTitle());
// Закрываем драйвер
driver.quit();
}
}
Шаг 2. Запустите код. Вы увидите, что браузер не запускается, а результаты тестов выводятся у вас в консоли.

Преимущества HtmlUnitDriver:
- Работает быстрее, по сравнению с другими браузерами
- Через драйвер HtmlUnit можно выбрать разные браузеры для симуляции
- Он не зависит от платформы и позволяет выполнять несколько тестов одновременно. Идеально подходит для нагрузочного тестирования.
Ограничения:
- Не может эмулировать поведение JavaScript в других браузерах
PhantomJS
PhantomJS — это headless-браузер с JavaScript API. Это оптимальное решение для headless тестирования сайтов, доступа и взаимодействия с веб-страницами по стандарту DOM API.
Для использования PhantomJS с Selenium необходимо использовать GhostDriver. GhostDriver — это реализация протокола Webdriver Wire на простом JS для PhantomJS.
В последнем релизе GhostDriver уже интегрирован и отдельно устанавливать его не нужно.
Вот как работает эта система:

Шаги для запуска PhantomJS с Selenium на Java
Шаг 1. Вам необходим Eclipse с установленным Selenium
Шаг 2. Скачайте PhantomJS здесь.

Шаг 3. Распакуйте скачанную папку в Program Files

Шаг 4. Загрузите PhantomJS Driver здесь. Добавьте .jar в свой проект

Шаг 5. Скопируйте следующий код
package htmldriver;
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
public class phantom {
public static void main(String[] args) {
File file = new File("C:/Program Files/phantomjs-2.0.0-windows/bin/phantomjs.exe");
System.setProperty("phantomjs.binary.path", file.getAbsolutePath());
WebDriver driver = new PhantomJSDriver();
driver.get("http://www.google.com");
WebElement element = driver.findElement(By.name("q"));
element.sendKeys("Guru99");
element.submit();
System.out.println("Page title is: " + driver.getTitle());
driver.quit();
}
}
Шаг 6. Запустите код. Вы должны увидеть, что браузер не запускается, а результаты тестов выводятся у вас в консоли.
ПРИМЕЧАНИЕ: При первом запуске, в зависимости от настроек, может появиться предупреждение системы безопасности Windows о необходимости разрешить запуск PhantomJS. Нажмите Разрешить доступ.

Многие организации используют PhantomJS для различных целей, например:
- Headless тестирование
- Захват экрана
- Автоматизация действий на страницах
- Мониторинг сети
- Для создания панели управления скриншотов
- Для запуска юнит тестов через командную строку
- Получение и визуализация PDF-файлов
- Используют с QUnit для тест-сьютов
Смотрите также: «Лучшие практики юнит-тестирования»
Заключение
Для быстрого автоматизированного тестирования веб-приложений в различных браузерах без визуального отображения используются headless-браузеры. Среди них все большую популярность завоевывают HtmlUnitDriver и PhantomJS, благодаря своей скорости, точности и доступности. Выполнив несколько несложных шагов, вы узнаете, как легко они взаимодействуют с другими инструментами и эффективно выполняют код для автоматизированного тестирования.
Перевод статьи «Headless Browser Selenium (HTMLUnitDriver)».