Headless-браузер в Selenium (HtmlUnitDriver)

Безголовый (headless) браузер – это браузер без графического интерфейса. Он может работать в фоновом режиме, не отображая GUI, как обычные браузеры. Это эффективный способ тестирования веб-приложений, который позволяет экономить время и ресурсы. В этом руководстве мы подробно рассмотрим, что такое headless-браузер, когда следует применять такой подход в тестировании и как его использовать с помощью Selenium.

Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

Содержание:

Когда следует использовать headless тестирование?

В современную цифровую эпоху веб-приложения разрабатываются с учетом совместимости с широким спектром устройств и платформ. Это часто становится проблемой для разработчиков сайтов, которым необходимо обеспечить корректную работу веб-приложений на всех платформах. Идеальным решением этой проблемы является тестирование в headless-браузере, позволяющее тестировать веб-приложения без графического интерфейса. В таких браузерах, разработчикам проще и быстрее тестировать сложные веб-приложения с множеством компонентов и зависимостей, а также они могут использовать их в модульном тестировании. Это позволяет ускорить разработку, обеспечить отсутствие критичных ошибок в коде и повысить удовлетворенность пользователей. 

Еще headless-браузер можно использовать на машине, где нет операционной системы с GUI (только командная строка). Это ускорит время выполнения тестов и снизит нагрузку на сервер. 

Headless тестирование с помощью Selenium

Selenium – это мощный инструмент для headless тестирования, позволяющий разработчикам запускать автоматизированные тесты без отображения пользовательского интерфейса. Выполняя тесты в фоновом режиме, Selenium позволяет экономить время и ресурсы, а также выявлять баги, которые могут быть незаметны при обычном тестировании с пользовательским интерфейсом. К ним относятся ошибки, связанные с производительностью, и проблемы с разметкой сайта, которые могут стать очевидными только в headless среде. Однако важно помнить об ограничениях headless тестирования и сочетать его с традиционными методами, с использованием UI, для обеспечения полного покрытия тестами.

Вот несколько примеров 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. Запустите код. Вы увидите, что браузер не запускается, а результаты тестов выводятся у вас в консоли.

запуск headless HtmlUnitDriver на Java

Преимущества HtmlUnitDriver:

  • Работает быстрее, по сравнению с другими браузерами
  • Через драйвер HtmlUnit можно выбрать разные браузеры для симуляции
  • Он не зависит от платформы и позволяет выполнять несколько тестов одновременно. Идеально подходит для нагрузочного тестирования.

Ограничения:

  • Не может эмулировать поведение JavaScript в других браузерах

PhantomJS

PhantomJS – это headless-браузер с JavaScript API. Это оптимальное решение для headless тестирования сайтов, доступа и взаимодействия с веб-страницами по стандарту DOM API.

Для использования PhantomJS с Selenium необходимо использовать GhostDriver. GhostDriver  – это реализация протокола Webdriver Wire на простом JS для PhantomJS.

В последнем релизе GhostDriver уже интегрирован и отдельно устанавливать его не нужно.

Вот как работает эта система:

схема работы PhantomJS

Шаги для запуска PhantomJS с Selenium на Java

Шаг 1. Вам необходим Eclipse с установленным Selenium

Шаг 2. Скачайте PhantomJS здесь.

скачивание PhantomJS

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

распаковка PhantomJS

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

установка PhantomJS Driver

Шаг 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. Нажмите Разрешить доступ.

запуск headless PhantomJS на Java

Многие организации используют PhantomJS для различных целей, например:

  • Headless тестирование
  • Захват экрана
  • Автоматизация действий на страницах
  • Мониторинг сети
  • Для создания панели управления скриншотов
  • Для запуска юнит тестов через командную строку
  • Получение и визуализация PDF-файлов
  • Используют с QUnit для тест-сьютов

Смотрите также: “Лучшие практики юнит-тестирования”

Заключение

Для быстрого автоматизированного тестирования веб-приложений в различных браузерах без визуального отображения используются headless-браузеры. Среди них все большую популярность завоевывают HtmlUnitDriver и PhantomJS, благодаря своей скорости, точности и доступности. Выполнив несколько несложных шагов, вы узнаете, как легко они взаимодействуют с другими инструментами и эффективно выполняют код для автоматизированного тестирования.

Перевод статьи «Headless Browser Selenium (HTMLUnitDriver)».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *