Reputation: 23
I am trying to create a working implementation of JBrowserDriver in Windows 10 with JDK 8 and InteliJ 2017, but am encountering an exception that I am unable to resolve. Does anyone know why I might be getting this exception?
Exception in thread "main" org.openqa.selenium.WebDriverException: org/openqa/selenium/security/Credentials
I've been successful in setting up working implementations of EdgeDriver, InternetExplorerDriver, ChromeDriver, FirefoxDriver, and PhantomJSDriver. Unfortunately this exception with JBrowserDriver continues to confound me.
The class looks like this:
package app;
import org.openqa.selenium.WebDriver;
import com.machinepublishers.jbrowserdriver.Timezone;
import com.machinepublishers.jbrowserdriver.JBrowserDriver;
import com.machinepublishers.jbrowserdriver.Settings;
public class Go {
public static void main(String[] args) {
JBrowserDriver driver = new JBrowserDriver(Settings.builder().timezone(Timezone.AMERICA_DENVER).build());
driver.get("https://www.google.com");
String title = driver.getTitle();
System.out.println(title);
driver.quit();
}
}
The Maven pom.xml file looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app.group</groupId>
<artifactId>Template</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-assembly-plugin -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>app.Go</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<!-- http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html -->
<!-- http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<!-- http://www.oracle.com/technetwork/java/javase/overview/index.html -->
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-exec -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-exec</artifactId>
<version>1.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient-cache -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient-cache</artifactId>
<version>4.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-remote-driver -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>3.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-api -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>3.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.machinepublishers/jbrowserdriver -->
<dependency>
<groupId>com.machinepublishers</groupId>
<artifactId>jbrowserdriver</artifactId>
<version>0.17.11</version>
</dependency>
</dependencies>
</project>
Here is the complete stack trace:
Exception in thread "main" org.openqa.selenium.WebDriverException: org/openqa/selenium/security/Credentials
Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T18:33:54.468Z'
System info: host: 'NeonFlimsy', ip: '10.0.0.224', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_161'
Driver info: driver.version: TestJBrowserDriver
at com.machinepublishers.jbrowserdriver.Util.handleException(Util.java:139)
at com.machinepublishers.jbrowserdriver.JBrowserDriver.<init>(JBrowserDriver.java:352)
at app.TestJBrowserDriver.launch(TestJBrowserDriver.java:16)
at app.Go.main(Go.java:17)
Caused by: java.lang.NoClassDefFoundError: org/openqa/selenium/security/Credentials
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetPublicMethods(Class.java:2902)
at java.lang.Class.getMethods(Class.java:1615)
at sun.rmi.server.Util.getRemoteInterfaces(Util.java:244)
at sun.rmi.server.Util.getRemoteInterfaces(Util.java:216)
at sun.rmi.server.Util.createProxy(Util.java:146)
at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:224)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:383)
at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:346)
at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:225)
at com.machinepublishers.jbrowserdriver.RemoteObject.<init>(RemoteObject.java:26)
at com.machinepublishers.jbrowserdriver.AlertServer.<init>(AlertServer.java:46)
at com.machinepublishers.jbrowserdriver.Context.<init>(Context.java:65)
at com.machinepublishers.jbrowserdriver.JBrowserDriverServer.setUp(JBrowserDriverServer.java:162)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:361)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.security.Credentials
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 32 more
Upvotes: 2
Views: 1897
Reputation: 193108
The error implies...
org.openqa.selenium.WebDriverException: org/openqa/selenium/security/Credentials
WebDriverException was raised during initialization of JBrowser.
First of all I suspect there is something wrong in :
JBrowserDriver driver = new JBrowserDriver(Settings.builder().timezone(Timezone.AMERICA_DENVER).build());
JBrowserDriver being a third party jar should have been configured as :
WebDriver driver = new JBrowserDriver(Settings.builder().timezone(Timezone.AMERICA_DENVER).build());
Next, you see NoClassDefFoundError as org/openqa/selenium/security/Credentials was not resolved runtime.
Caused by: java.lang.NoClassDefFoundError: org/openqa/selenium/security/Credentials
This issue is pretty much similar to the QA How can I resolve my class from a different jar with same structure like another
There can be multiple possibilities behind the reason you are seeing NoClassDefFoundError as follows :
The preliminary reason seems to be that the class was not found in the classpath. As you have mentioned that you are adding:
import com.machinepublishers.jbrowserdriver.JBrowserDriver;
related jar as an external dependency. Make sure you have the correct version of the jar where the scope is properly defined and it is bundled when you package your application.
<!-- https://mvnrepository.com/artifact/com.machinepublishers/jbrowserdriver -->
<dependency>
<groupId>com.machinepublishers</groupId>
<artifactId>jbrowserdriver</artifactId>
<version>0.17.11</version>
</dependency>
You can find a detailed discussion on NoClassDefFoundError in the discussion Exception in thread “main” java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
Finally, with the purview of WebDriver the pom.xml contains multiple references as follows :
First:
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.1</version>
</dependency>
Second:
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-remote-driver -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>3.8.1</version>
</dependency>
Third:
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-api -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>3.8.1</version>
</dependency>
Forth:
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.8.1</version>
</dependency>
The possible solutions would be :
Upvotes: 1