java.lang.NoSuchMethodError: org.openqa.selenium.o

2020-02-15 06:24发布

OS - Windows 7

PhantomJS version - 2.1.1

Selenium - 3.8.1(selenium-server).

JDK - 152.

I'm trying to run simple test, using PhantomJS:

1) initializing the driver:

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

2) any test, let it be verifying text "welcome" on en.wikipedia.org:

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

3) Running test, but receiving errors:

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)

Googling showed, that such troubles occur time to time (non-compatible selenium/PhantomJS). Question: is there any workaround for making last selenium(s) and 2.1.1 PhantomJS good friends?

note: any other driver works fine (edge, chrome, ff).

2条回答
▲ chillily
2楼-- · 2020-02-15 07:12

The error you are seeing says it all :

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

Class NoSuchMethodError

NoSuchMethodError extends IncompatibleClassChangeError and as per the Java Docs it is thrown if an application tries to call a specified method of a class (either static or instance), and that class no longer has a definition of that method. Normally, this error is caught by the compiler and this error can only occur at run time if the definition of a class has incompatibly changed.

Solution

Perform the following steps :

  • Update your JDK to the most recent versions (Java 8 Update 151)
  • Clean up the Project Space from the IDE.
  • Run CCleaner tool to wipe off all the OS system chores.
  • Take a System Reboot
  • Add only Selenium-Java Clients v3.8.1 jar.
  • As you are using PhantomJSDriver (GhostDriver) you need to add the following Maven Dependency :

    <dependency>
        <groupId>com.github.detro</groupId>
        <artifactId>phantomjsdriver</artifactId>
        <version>1.4.0</version>
    </dependency> 
    
  • You need to update the line System.setProperty with the absolute path of the phantomjs binary as follows :

    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/");
    
  • Execute your Test

查看更多
Ridiculous、
3楼-- · 2020-02-15 07:29

Just to add a different scenario where the same exception can be faced.

While using Eclipse below code was working :

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

While using Intellij, the same above code was throwing the error as mentioned in the question.

But the below worked with the Intellij :

DesiredCapabilities capabilities = new DesiredCapabilities();

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

WebDriver driver = new PhantomJSDriver(capabilities);

Note:Dont forget to change the exe path.

查看更多
登录 后发表回答