Скрипт не работает в HtmlUnitDriver

Моя цель выполнить безголовый просмотр для автоматизации тестирования. Я использую Selenium WebDriver с Java.

Теперь проблема в том, что скрипт нормально работает в браузере Firefox, но не в HtmlUnitDriver.

Пожалуйста, направьте меня, где я сделал ошибку.

public class Headless 
{
    public static void main(String[] args) throws InterruptedException
    {
        WebDriver driver = new HtmlUnitDriver();
        //WebDriver driver=new FirefoxDriver();

// Navigate to Google      
        driver.get("https://www.google.co.in/?gfe_rd=cr&ei=k36cVsa6OubI8Aec14bICQ&gws_rd=ssl"); 
        //Thread.sleep(14000);


        WebDriverWait wait=new WebDriverWait(driver,10);
        wait.until(ExpectedConditions.presenceOfElementLocated(By.id("sb_ifc0")));



        System.out.println("URL= "+driver.getCurrentUrl());
        // Locate the searchbox using its name     
        WebElement element = driver.findElement(By.id("sb_ifc0")); 

       // Enter a search query     
       element.sendKeys("Guru99"); 

       // Submit the query. Webdriver searches for the form using the text input element automatically     
       // No need to locate/find the submit button     
       element.submit();           

       // This code will print the page title      
       System.out.println("Page title is: " + driver.getTitle());     

Ошибка в случае HtmlUnitDriver:

    Exception in thread "main" java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/javascript/host/Event
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.resetKeyboardAndMouseState(HtmlUnitDriver.java:513)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:509)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:469)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.<init>(HtmlUnitDriver.java:185)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.<init>(HtmlUnitDriver.java:195)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.<init>(HtmlUnitDriver.java:191)
    at com.se.ecoreal.selenium.Headless.main(Headless.java:15)
Caused by: java.lang.ClassNotFoundException: com.gargoylesoftware.htmlunit.javascript.host.Event
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

person TodayILearned    schedule 18.01.2016    source источник
comment
Вы уверены, что даете ему достаточно времени для загрузки TimeoutException: Timed out after 10 seconds. Есть несколько сложных случаев с безголовыми браузерами, но селекторы id к ним не относятся. Вы также можете попробовать ghostdriver.   -  person ekostadinov    schedule 18.01.2016


Ответы (1)


Это не работает, потому что javascript по умолчанию отключен для HtmlUnitDriver. Проверьте код конструктора по умолчанию:

  public HtmlUnitDriver() {
    this(false);
  }
  public HtmlUnitDriver(boolean enableJavascript) {
    this(BrowserVersion.getDefault(), enableJavascript);
  }

Ваш пример работает для меня, если я включу javascript:

 WebDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_38, true);

Изменить (ответ на отредактированный вопрос):
Ошибка NoClassDefFoundError вызвана отсутствием (или неправильной версией) зависимости. Если вы используете maven или gradle, проверьте свой проект на наличие конфликтов зависимостей. Если вы не используете управление зависимостями, убедитесь, что вы включили все зависимости HtmlUnit.

person Cyril    schedule 18.01.2016
comment
Спасибо за отредактированный ответ. Я могу разрешить NoClassDefFoundError, включив правильную зависимость. - person TodayILearned; 20.01.2016
comment
Кирилл, пожалуйста, взгляните на этот вопрос: правильно"> stackoverflow.com/questions/34891035/ - person TodayILearned; 20.01.2016
comment
Можете просто указать, какая правильная зависимость? Ответ TH и комментарии не говорят, что они собой представляют! - person Stealth Rabbi; 22.09.2017