java.lang.NoSuchMethodError:org.openqa.selenium.os.CommandLine.find(Ljava / lang / String;)Ljava / lang / String;使用PhantomJS 2.1.1和Selenium

时间:2017-12-10 22:05:36

标签: selenium selenium-webdriver webdriver phantomjs

操作系统 - Windows 7

PhantomJS版本 - 2.1.1

硒 - 3.8.1(硒 - 服务器)。

JDK - 152。

我正在尝试使用PhantomJS进行简单测试:

1)初始化驱动程序:

System.setProperty("phantomjs.binary.path","src\\main\\resources\\phantomjs.exe");
WebDriver driver = new PhantomJSDriver();

2)任何测试,让它在en.wikipedia.org上验证文本“welcome”:

driver.get("http://en.wikipedia.org");
System.out.println(driver.findElement(By.xpath("//div[contains(text(),'Welcome')]")).isDisplayed());

3)运行测试,但收到错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.openqa.selenium.os.CommandLine.find(Ljava/lang/String;)Ljava/lang/String;
    at org.openqa.selenium.phantomjs.PhantomJSDriverService.findPhantomJS(PhantomJSDriverService.java:232)
    at org.openqa.selenium.phantomjs.PhantomJSDriverService.createDefaultService(PhantomJSDriverService.java:181)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:104)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:94)
谷歌搜索表明,这种麻烦时有发生(不兼容的硒/ PhantomJS)。 问题:有没有制作最后一个硒和2.1.1 PhantomJS好朋友的解决方法?

注意:任何其他驱动程序都可以正常工作(edge,chrome,ff)。

2 个答案:

答案 0 :(得分:1)

您看到的错误说明了一切:

NoSuchMethodError: org.openqa.selenium.os.CommandLine.find(Ljava/lang/String;)Ljava/lang/String;

班级 NoSuchMethodError

NoSuchMethodError扩展IncompatibleClassChangeError并根据 Java Docs ,如果应用程序尝试调用类的指定方法(静态或实例),则抛出它该类不再具有该方法的定义。通常,编译器会捕获此错误,并且只有在类的定义发生不兼容更改时才会在运行时发生此错误。

解决方案

执行以下步骤:

  • JDK 更新为最新版本( Java 8 Update 151
  • 清理IDE中的 Project Space
  • 运行 CCleaner 工具以清除所有操作系统系统。
  • 选择 System Reboot
  • 仅添加 Selenium-Java客户端v3.8.1 jar。
  • 当您使用 PhantomJSDriver(GhostDriver)时,您需要添加以下 Maven依赖

    <dependency>
        <groupId>com.github.detro</groupId>
        <artifactId>phantomjsdriver</artifactId>
        <version>1.4.0</version>
    </dependency> 
    
  • 您需要使用 System.setProperty 二进制文件的绝对路径更新 phantomjs 行,如下所示:

    File path=new File("C:\\path\\\to\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
    System.setProperty("phantomjs.binary.path",path.getAbsolutePath());
    WebDriver driver= new PhantomJSDriver();
    driver.navigate().to("https://www.google.co.in/");
    
  • 执行 Test

答案 1 :(得分:0)

只需添加一个可以遇到相同异常的不同方案即可。

在使用Eclipse时,以下代码有效:

File file = new File("C://phantomjs.exe");
System.setProperty("phantomjs.binary.path", file.getAbsolutePath());
WebDriver driver = new PhantomJSDriver();

使用Intellij时,上面的相同代码抛出了问题中提到的错误。

但以下内容适用于Intellij:

DesiredCapabilities capabilities = new DesiredCapabilities();

capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C:\\phantomjs.exe");

WebDriver driver = new PhantomJSDriver(capabilities);

注意:请不要忘记更改exe路径。