Search code examples
javamacosseleniumselenium-webdriverclassnotfoundexception

class not found with selenium and java


Im trying to learn selenium webdriver, but im running in to a problem.

I have made a very small test which looks like this:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Flows {

    public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver", "/Users/mn/Downloads/belikewater/chromedriver");
        WebDriver driver = new ChromeDriver();

        String baseUrl = "http://anywhere.c3a.dk/";


        driver.get(baseUrl);

        System.out.println(driver.getTitle());

        driver.close();

    }
}

Im using gradle, and it looks like this:

group 'com.cetrea'
version '1.0-SNAPSHOT'

apply plugin: 'java'

group = 'com.cetrea'
version = '1.0.0'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.seleniumhq.selenium:selenium-java:2.41.0')
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

jar {
    manifest{
        attributes 'Main-Class': 'com.cetrea.flowtesting.Flows'
    }
}

I am getting the exception in

"main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
    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)
    ... 7 more

I am using Mac OS, and have tried brew install chromedriver, but i couldnt locate the path to it, as i am very new to mac aswell, so i downloaded a zip and copied the chromedriver executeable in to my project.

Also cant remember how to get the full stack trace..

** I must have been fucking something up. Running it with right clicking flows, and then pressing run flows.main() gave me another error, so atleast it has found the things it needed now. BUT i get this following error.

Starting ChromeDriver (v2.8.241036) on port 47434
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
May 07, 2018 11:39:22 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Exception in thread "main" org.openqa.selenium.WebDriverException: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0:1:47434
Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:26:55.152Z'
System info: host: 'cetreas-MacBook-Pro.local', ip: 'fe80:0:0:0:c9e:2c67:1d27:4e0b%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.3', java.version: '1.8.0_161'
Driver info: driver.version: RemoteWebDriver
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:92)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:545)
    at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:273)
    at com.cetrea.flows.Flows.main(Flows.java:15)
Caused by: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0:1:47434
    at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:240)
    at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:158)
    at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:256)
    at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:134)
    at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:113)
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
    at okhttp3.RealCall.execute(RealCall.java:77)
    at org.openqa.selenium.remote.internal.OkHttpClient.execute(OkHttpClient.java:101)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:155)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    ... 3 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at okhttp3.internal.platform.Platform.connectSocket(Platform.java:125)
    at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:238)
    ... 23 more

Could it be something like a firewall blocking it or something? It is a mac i have borrowed for half a year, so im not fully used to working on it yet.


Solution

  • How do you run it?

    I suspect this one isn't a Selenium issue. It looks suspiciously like that you are running your app something like this: java -jar your-jar-name.jar. But you need to supply all required jars on classpath.

    A simple option would be to add following lines to your gradle file

    apply plugin: 'application'
    mainClassName = "com.cetrea.flowtesting.Flows"
    

    Then run it as gradle run

    Or you can ask gradle to copy all dependedency jars somehwere for you and then mention them all in your class path.

    Should run successfully if you have downloaded the correct driver. Though you might still need some more dependencies as suggested in the answers referred in comments. But at the very least org.openqa.selenium.WebDriver should be already on your classpath.