Reputation: 694
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).
Upvotes: 1
Views: 5661
Reputation: 2096
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.
Upvotes: 2
Reputation: 193128
The error you are seeing says it all :
NoSuchMethodError: org.openqa.selenium.os.CommandLine.find(Ljava/lang/String;)Ljava/lang/String;
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.
Perform the following steps :
JDK
to the most recent versions (Java 8 Update 151
)Project Space
from the IDE.CCleaner
tool to wipe off all the OS system chores.System Reboot
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
Upvotes: 1