操作系统 - 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)。
答案 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
)Project Space
。CCleaner
工具以清除所有操作系统系统。System Reboot
当您使用 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路径。