How can I resolve my class from a different jar wi

2019-01-27 22:44发布

How can I resolve my class from a different jar with same structure like another

Note : Though the jars in question contains the word selenium but the question here have no direct relation with selenium

Till a few days back PhantomJSDriver was released bundled along with selenium-server-standalone-v.v.v.jar. So my Class was working fine as:

import java.io.File;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

public class A_PhantomJS
{
    public static void main(String[] args) 
    {
          File path=new File("C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
          System.setProperty("phantomjs.binary.path",path.getAbsolutePath());
          WebDriver driver= new PhantomJSDriver();
          driver.manage().window().maximize();
          driver.get("https://www.google.co.in");
    }
}

Now selenium-server-standalone-v.v.v.jar doesn't bundles the jar for PhantomJSDriver dependency.

So I have downloaded the jar phantomjsdriver-1.1.0.jar and added as an external jar to my project.

You can see the structure of the phantomjsdriver-1.1.0.jar is similar to what it was earlier when it was bundled with selenium-server-standalone-v.v.v.jar

PhantomJSDriver

Now, though my Class gets resolved through:

import org.openqa.selenium.phantomjs.PhantomJSDriver;

But I am facing a Runtime exception of java.lang.NoClassDefFoundError as follows:

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/browserlaunchers/Proxies
    at org.openqa.selenium.phantomjs.PhantomJSDriverService.createDefaultService(PhantomJSDriverService.java:178)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:99)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:89)
    at demo.A_PhantomJS.main(A_PhantomJS.java:15)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.browserlaunchers.Proxies
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 4 more

Line 15 being:

WebDriver driver= new PhantomJSDriver();

As per the error I have searched for org.openqa.selenium.browserlaunchers.Proxies within the phantomjsdriver-1.1.0.jar unable to find any clue.

NoClassDefFoundError

Can anyone help me out please?

4条回答
forever°为你锁心
2楼-- · 2019-01-27 23:13

even i had the same issue. try the below code. It worked for me;

    WebDriver driver;
    File src = new File("//PATH");
    System.setProperty("phantomjs.binary.path", src.getAbsolutePath());
    DesiredCapabilities caps = new DesiredCapabilities();
    caps.setJavascriptEnabled(true);
    caps.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    driver = new PhantomJSDriver(caps);
    driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);

    caps = new DesiredCapabilities();
    caps.setJavascriptEnabled(true);
    caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS,
            new String[] { "--web-security=no", "--ignore-ssl-errors=yes" });
    driver = new PhantomJSDriver(caps);

    driver.get("URL");
查看更多
闹够了就滚
3楼-- · 2019-01-27 23:17

Finally the Question is Answered in a User Group by none other than Simon Stewart.

Answer : There's a version of phantomjsdriver ('com.codeborne:phantomjsdriver:jar:1.4.4') that appears to be kept up to date with latest selenium releases. I'd suggest using that.

Here is the snapshot of Simon's comment :

Simon_Stewart

Here is the working solution: PhantomJSDriver_solved

查看更多
Luminary・发光体
4楼-- · 2019-01-27 23:27

The exception tells that the required class was not found in the classpath. As you have mentioned that you are adding PhantomJSDriver-jar as an external dependency. Make sure you have the correct scope for the jar and it is bundled when you package your application.

Refer to this question to get better understanding of the scope.

查看更多
Juvenile、少年°
5楼-- · 2019-01-27 23:36

This jar includes org.openqa.selenium.browserlaunchers.Proxies, try adding it to your classpath:

https://search.maven.org/remotecontent?filepath=org/seleniumhq/selenium/selenium-api/2.4.0/selenium-api-2.4.0.jar

If you miss other classes, you can search them by classname with Advanced Search on Maven Central Repository: https://search.maven.org/#advancedsearch%7Cgav

查看更多
登录 后发表回答