Что такое htmlunitdriver и когда его использовать ?

Ребята , подскажите что такое htmlunitdriver и когда и для чего его использовать ? В интернете посмотрел примеры, вроде так же как обычный вебдрайвер вызывается . Так в чем разница ?

image

Если коротко, это веб-браузер без башки (графического интерфейса). А значит практически без тормозов, но при этом очень специфически поддерживает джава-скрипт.

Подробнее в документации написано:

1 лайк
  1. То есть браузер запускаться не должен?
    Я попробовал сейчас вместо обычного запуска вебрайвера сделать так
driver = new HtmlUnitDriver();

Тест не запустился, ошибки полезли.

  1. В каких случаях используется этот HtmlUnitDriver?
  2. Можно самый простой пример с А+Б, где используется HtmlUnitDriver?

Вот накидал пример, нашел в гугле, я так понял браузер вообще не должен запускаться, но тест игнорируется и ничего не происходит, просвятите пожалуйста

package test;

import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

public class HtmlUnitDriverTest {

    private static WebDriver driver;

    @BeforeClass
    public static void setUp(){
        driver = new HtmlUnitDriver();
    }

    @Test
    public void test(){
        driver.get("http://www.google.com");

        WebElement element = driver.findElement(By.name("q"));

        element.sendKeys("Selenium");

        element.submit();

        System.out.println("Page title is: " + driver.getTitle());

        driver.quit();
    }



}


Это довольно специфичный браузер без пользовательского интерфейса вообще. Потом еще появился PhantomJS. Но теперь я уже ни то ни другое предпочитаю не использовать. Если нужен безголовый браузер попробуйте запускать Chrome в режиме headless

1 лайк

В последних версиях селениума HtmlUnit и PhantomJS убрали вот поэтому у тебя и ошибки, щас используют firefox и chrome без графического интерфейса вместо них.

1 лайк

А объясните для чего и в каких случаях используют браузер без графического интерфейса? Пару живых примеров если можно

Нашел такой код


    @Test
    public void Headless(){
        ChromeOptions options = new ChromeOptions();
        options.addArguments("headless");
        options.addArguments("window-size=1200x600");

        WebDriver driver = new ChromeDriver(options);
        driver.get("https://google.com");
        WebElement el = driver.findElement(By.name("q"));
        el.sendKeys("Selenium Java");
    }

Запускаю его - тест пассед, но ничего не происходит. Я не до конца понимаю что за headless режим. Как я понял, это запускается программа, только без окна браузера, но как тогда выполняются команды Открыть браузер - Открыть гугл - написать что-то в поиске. Поясните плиз :slight_smile:

  • Никаких видимых окон и не будет, в этом то и фишка. Когда разворачиваешь на серверной оси - намного проще - экран не нужен, видеокарта не нужна. А сам движок браузера работает. Он даже скрины может делать :slight_smile:

  • Такой безголовый режим мало того что не требует настройки виртуального дисплея, так еще и по слухам быстрей работает и потенциально меньше ест оперативки, но цифр у меня нет.

  • Но учти что видео записать не получится - только скриншоты. Ну и я слышал про определенные нюансы и отличия в работе в сравнении с обычным браузером.

1 лайк

Понял теперь, спасибо.
А как мне локально затестить это дело? Ну вот запустил я тест. Где мне логи смотреть и скрины(в каких случаях они делаются?)

  • Есть логи хромдрайвера
  • Есть логи твоих тестов
  • Ну еще потенциально логи селениум сервера, если ты работаешь через него
1 лайк

вы можете запустить этот тест у себя?

    @Test
    public void Headless(){
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless");
        options.addArguments("window-size=1200x600");

        WebDriver driver = new ChromeDriver(options);
        driver.get("https://google.com");
        WebElement el = driver.findElement(By.name("q"));
        el.sendKeys("Selenium Java");
    }

Я хочут понять правильно ли все написано.
И почему у меня в консоли ничего не выводится?

А зачем тебе что то выводить? :slight_smile:

Попробуй проверить несушествующий элемент - сразу упадешь, увидишь что браузер работает

1 лайк

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

Так запускай без хедлес и смотри что происходит.

хочешь посмотреть результат допиши еще после строки el.sendKeys(“Selenium Java”); следующие

	el.sendKeys(Keys.ENTER);
	
	List<WebElement> listEl = driver.findElements(By.xpath("//div[@class='g']//h3/a"));
	
	for(WebElement a: listEl)
		System.out.println(a.getAttribute("textContent"));

У тебя должен появится список из заголовков всех страниц на первой поисковой странице гугла.

Что-то типа такого
Free Selenium Tutorial | Selenium WebDriver Tutorials | For Beginners
Maven Repository: org.seleniumhq.selenium » selenium-java
Пишем первый автотест с Selenium Webdriver и Java. Часть 2 …
Downloads - Selenium
Selenium WebDriver - Selenium - автоматизация веб-приложений
Введение в автоматизированное тестирование на Java с Selenium
How to create a simple Selenium WebDriver test using Java and IntelliJ
Selenium Tutorial - Get started using Java - AirPair
Getting Started with WebDriver-Selenium for Java in Eclipse | Sauce …
Что такое Selenium WebDriver? / Хабрахабр

1 лайк

не появляется ничего :frowning:
Просто Process finished with exit code 0

попробуй скачать последнюю версию драйвера, селениума, и хрома, если не заработает, попробуй выполнить в обычном режиме.

я не так давно все полностью ставил, похоже проблема не в этом, так как в обычном режиме тоже ничего не печатает в консоль. Вот полный мой код

package test;

import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.logging.LogEntry;

import java.net.MalformedURLException;
import java.util.List;

import static org.junit.Assert.assertTrue;

public class BrowserHeadless {
    private static WebDriver driver;


    @BeforeClass
    public static void SetUp() throws MalformedURLException {
        System.setProperty("webdriver.chrome.driver","C:\\Users\\username\\downloads\\chromedriver_win32\\chromedriver.exe");
       
    }

    @Test
    public void Headless(){

        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless");
        options.addArguments("window-size=1200x600");

        WebDriver driver = new ChromeDriver(options);
        driver.get("https://google.com");
        WebElement el = driver.findElement(By.name("q"));
        el.sendKeys("Selenium Java");

        List<WebElement> listEl = driver.findElements(By.xpath("//div[@class='g']//h3/a"));

        for(WebElement a: listEl)
            System.out.println(a.getAttribute("textContent"));
    }
}

ты забыл строчку el.sendKeys(Keys.ENTER); ее надо добавить после вот этой строки el.sendKeys(“Selenium Java”);

1 лайк