如何从具有相同结构的不同jar中解析我的类

时间:2018-01-10 17:07:10

标签: java selenium jar phantomjs classnotfoundexception

如何从另一个具有相同结构的jar中解析我的类

  

注意:虽然有问题的广告词包含 selenium 这个词,但这里的问题与 selenium 没有直接关系

几天前, PhantomJSDriver selenium-server-standalone-v.v.v.jar捆绑在一起发布。所以我的班级工作正常:

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");
    }
}

现在selenium-server-standalone-v.v.v.jar没有为 PhantomJSDriver 依赖关系捆绑jar。

所以我已经下载了jar phantomjsdriver-1.1.0.jar并将其作为外部jar添加到我的项目中。

您可以看到phantomjsdriver-1.1.0.jar的结构与之前与selenium-server-standalone-v.v.v.jar

捆绑在一起时的结构类似

PhantomJSDriver

现在,虽然我的班级通过以下方式得到解决:

import org.openqa.selenium.phantomjs.PhantomJSDriver;

但我面临java.lang.NoClassDefFoundError的运行时异常,如下所示:

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

第15行:

WebDriver driver= new PhantomJSDriver();

根据我在phantomjsdriver-1.1.0.jar中搜索org.openqa.selenium.browserlaunchers.Proxies的错误无法找到任何线索。

NoClassDefFoundError

有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:3)

此jar包含 org.openqa.selenium.browserlaunchers.Proxies ,请尝试将其添加到类路径中:

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

如果您错过了其他课程,可以使用Maven Central Repository上的高级搜索按类名进行搜索:https://search.maven.org/#advancedsearch%7Cgav

答案 1 :(得分:2)

该异常表明在类路径中找不到所需的类。 正如您所提到的那样,您要将PhantomJSDriver-jar添加为外部依赖项。确保您具有正确的jar范围,并在打包应用程序时捆绑它。

请参阅此question以更好地了解范围。

答案 2 :(得分:2)

最后,User Group通过Simon Stewart进行回答。

  

回答 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.

以下是Simon评论的快照:

Simon_Stewart

这是工作解决方案: PhantomJSDriver_solved

答案 3 :(得分:1)

即使我有同样的问题。试试下面的代码。它对我有用;

    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");