Search code examples
seleniumhtmlunit

Getting HTMLUnit driver exception (java.lang.ClassNotFoundException) - w Selenium and Java


Complete Stack Trace snapshot here I am new to Headless browser concepts. I am trying to validate a page to validate couple of webElement values against huge set of records using Selenium.

I'd like to use HTMLUnit driver (or any headless browser driver) to fetch this information but i get Class not found exception when i initiate HTMLUnit driver. Below is my pom and code i am using. Appreciate your help. Thanks!

pom.xml:

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-core</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.picocontainer</groupId>
<artifactId>picocontainer</artifactId>
<version>2.15</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>3.141.59</version>
</dependency>   
<dependency>
<groupId>com.vimalselvam</groupId>
<artifactId>cucumber-extentsreport</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>com.aventstack</groupId>
<artifactId>extentreports</artifactId>
<version>3.1.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>   
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-htmlunit-driver</artifactId>
<version>2.52.0</version>
</dependency>
</dependencies>

HTMLunit driver code:

public WebDriver inithtmlUnitDriver() {
// To declare and initialize HtmlUnitDriver
WebDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME);
// Set implicit wait 
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
return driver;
}

Solution

  • You are trying to mix different Selenium versions:

    <dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    
    <version>3.9.1</version>
    
    </dependency>
    <dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-api</artifactId>
    
    <version>3.141.59</version>
    
    </dependency>   
    

    You should be consistent and use 3.141.59 and change the dependency of the HTML unit driver to the current version. They changed the artifact to match HTML unit versions.

    <dependency>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>htmlunit-driver</artifactId>
      <version>2.34.0</version>
    </dependency>
    

    That should solve your dependency problems.