在 Selenium 中使用 PhantomJS 时出错:NoSuchMethodError org/openqa/selenium/browserlaunchers/Proxies

Error while using PhantomJS in Selenium: NoSuchMethodError org/openqa/selenium/browserlaunchers/Proxies

我正在尝试使用 PhantomJS 运行 非常简单的 Java 自动化测试用例。我正在使用以下版本:

  1. selenium-server-standalone3.8.1.jar
  2. Windows
  3. 的 PhantomJS 2.1.1 版本
  4. PhantomJSdriver.jar 1.1。版本

我的代码所需的功能和驱动程序启动如下:

        DesiredCapabilities caps = new DesiredCapabilities();
        ((DesiredCapabilities) caps).setJavascriptEnabled(true);
        ((DesiredCapabilities) caps).setCapability("takesScreenshot", true);
        ((DesiredCapabilities) caps).setCapability(
                PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,
                "C:/Program Files/phantomjs-2.1.1-windows/bin/phantomjs.exe"   //java web start / jnpl file...
                // "/Controller/phantomjs.exe"
        );

        //SET enabled javascript for php script on WEB page to transform it to picture:
        caps.setJavascriptEnabled(true);
        String [] phantomJsArgs = {"--web-security=no", "--ignore-ssl-errors=yes"};
        caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, phantomJsArgs);

        //CREATING WEB driver
        WebDriver driver = new PhantomJSDriver(caps);

但是,我得到这个错误:

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.(PhantomJSDriver.java:99) at HD_PhantomJSTest1.main(HD_PhantomJSTest1.java:33) Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.browserlaunchers.Proxies at java.net.URLClassLoader.run(URLClassLoader.java:372) at java.net.URLClassLoader.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 3 more

java.lang.NoClassDefFoundError

java.lang.NoClassDefFoundError 当 Java 虚拟机无法在 运行 时间找到特定的 class 时观察到在编译时可用。

例如,如果我们有一个来自 class 的方法调用或访问 Class 的任何静态成员,并且 class 在 运行 期间不可用-time 然后 JVM 将抛出 java.lang.NoClassDefFoundError.

根据您的 Test Bed 信息,我不确定是否包含 PhantomJSdriver.jar 1.1. versionPhantomJS 的当前实现不需要任何额外的 jar。相关 Selenium JARs 解析所需的依赖项。所以你可以删除 PhantomJSdriver.jar 1.1. version.

除此之外,我在您的代码中没有看到任何此类错误。然而,经过一些代码格式化后,我用我的配置执行了你的代码,结果是 SUCCESS 如下:

@Test
public void verifyFacebookTitle()
{
    DesiredCapabilities caps = new DesiredCapabilities();
    ((DesiredCapabilities) caps).setJavascriptEnabled(true);
    ((DesiredCapabilities) caps).setCapability("takesScreenshot", true);
    ((DesiredCapabilities) caps).setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C:\Utility\phantomjs-2.1.1-windows\bin\phantomjs.exe");
    caps.setJavascriptEnabled(true);
    String [] phantomJsArgs = {"--web-security=no", "--ignore-ssl-errors=yes"};
    caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, phantomJsArgs);
    WebDriver driver = new PhantomJSDriver(caps);
    driver.get("https://www.facebook.com/");
    System.out.println(driver.getTitle());
    driver.quit();
}

我的控制台输出:

INFO: Detected dialect: OSS
Facebook – log in or sign up
[INFO  - 2017-12-06T08:24:22.972Z] ShutdownReqHand - _handle - About to shutdown
PASSED: verifyFacebookTitle

===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================