【问题标题】:Dependency error with Selenium 3.3.1 and FirefoxDriverSelenium 3.3.1 和 FirefoxDriver 的依赖性错误
【发布时间】:2017-03-25 18:20:46
【问题描述】:

我使用 geckodriver v0.15.0(最新版本)和 Firefox 52.0.1(64 位)

这是我的代码:

public static void main(String[] args) {
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.google.com");
    System.out.println("Page title is: " + driver.getTitle());
    driver.quit();
}

这是我的 pom 中 Selenium 的依赖项(Selenium 的最新版本):

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-firefox-driver</artifactId>
    <version>3.3.1</version>
    <scope>test</scope>
</dependency>  
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-support</artifactId>
    <version>3.3.1</version>
    <scope>test</scope>
</dependency> 

还有运行时的异常:

Exception in thread "main" java.lang.NoSuchMethodError: org.openqa.selenium.net.PortProber.waitForPortUp(IILjava/util/concurrent/TimeUnit;)V
at org.openqa.selenium.firefox.GeckoDriverService.waitUntilAvailable(GeckoDriverService.java:73)
at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:166)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:78)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:644)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:249)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:218)

如果我添加这个依赖:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-remote-driver</artifactId>
    <version>3.3.1</version>
</dependency> 

我还有一个例外:

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/interactions/Interactive

缺少什么依赖?谢谢。

更新

mvn dependency:tree 带有 htmlunit-driver 2.25、selenium-remote-driver 3.3.1、selenium-firefox-driver 3.3.1、selenium-support 3.3.1

[INFO] +- org.seleniumhq.selenium:htmlunit-driver:jar:2.25:compile
[INFO] |  +- org.seleniumhq.selenium:selenium-api:jar:2.53.1:compile
[INFO] |  \- net.sourceforge.htmlunit:htmlunit:jar:2.21:compile
[INFO] |     +- xalan:xalan:jar:2.7.2:compile
[INFO] |     |  \- xalan:serializer:jar:2.7.2:compile
[INFO] |     +- org.apache.commons:commons-lang3:jar:3.4:compile
[INFO] |     +- org.apache.httpcomponents:httpmime:jar:4.5.2:compile
[INFO] |     +- net.sourceforge.htmlunit:htmlunit-core-js:jar:2.17:compile
[INFO] |     +- net.sourceforge.htmlunit:neko-htmlunit:jar:2.21:compile
[INFO] |     |  \- xerces:xercesImpl:jar:2.11.0:compile
[INFO] |     |     \- xml-apis:xml-apis:jar:1.4.01:compile
[INFO] |     +- net.sourceforge.cssparser:cssparser:jar:0.9.18:compile
[INFO] |     |  \- org.w3c.css:sac:jar:1.3:compile
[INFO] |     +- commons-io:commons-io:jar:2.4:compile
[INFO] |     \- org.eclipse.jetty.websocket:websocket-client:jar:9.4.1.v20170120:compile
[INFO] |        +- org.eclipse.jetty:jetty-util:jar:9.4.1.v20170120:compile
[INFO] |        +- org.eclipse.jetty:jetty-io:jar:9.4.1.v20170120:compile
[INFO] |        +- org.eclipse.jetty:jetty-client:jar:9.4.1.v20170120:compile
[INFO] |        |  \- org.eclipse.jetty:jetty-http:jar:9.4.1.v20170120:compile
[INFO] |        \- org.eclipse.jetty.websocket:websocket-common:jar:9.4.1.v20170120:compile
[INFO] |           \- org.eclipse.jetty.websocket:websocket-api:jar:9.4.1.v20170120:compile
[INFO] +- org.seleniumhq.selenium:selenium-remote-driver:jar:3.3.1:compile
[INFO] |  +- cglib:cglib-nodep:jar:3.2.4:compile
[INFO] |  +- org.apache.commons:commons-exec:jar:1.3:compile
[INFO] |  \- net.java.dev.jna:jna-platform:jar:4.1.0:compile
[INFO] |     \- net.java.dev.jna:jna:jar:4.2.2:compile
[INFO] +- org.seleniumhq.selenium:selenium-firefox-driver:jar:3.3.1:compile
[INFO] \- org.seleniumhq.selenium:selenium-support:jar:3.3.1:compile

更新 2

操作系统:Linux 64 位

【问题讨论】:

    标签: java maven selenium selenium-firefoxdriver


    【解决方案1】:

    这是所需的依赖项(我也清理了 .m2 目录):

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.4.6</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-remote-driver</artifactId>
        <version>3.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-api</artifactId>
        <version>3.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-firefox-driver</artifactId>
        <version>3.3.1</version>
    </dependency>
    

    【讨论】:

      【解决方案2】:

      也许你有 jar 版本冲突错误。当我的应用程序中出现该错误时,我发现它指的是旧的 Selenium jar。为了解决这个问题,我删除了旧 jar 并使用 Selenium 3 jar 重建项目。

      确保您已将正确的库添加到您的项目中。

      命令mvn dependency:tree 可以帮助您。

      注意:当您使用测试范围时,这意味着该依赖项仅适用于测试编译和执行阶段,因此您必须将代码放在测试方法中或删除范围标签

      希望这会有所帮助。

      【讨论】:

      • 似乎不是 jar 版本冲突(请参阅我对 mvn:dependency:tree 输出的更新)。我也尝试删除 .m2 。您适合范围测试,谢谢,但还有另一个问题
      • 还是同样的例外还是另一个例外?
      • 是的。我找到了解决方案。需要 selenium-api 依赖
      【解决方案3】:

      检查您是否具有与其他依赖项相同版本的 selenium-java 依赖项

      <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
      <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-java</artifactId>
          <version>3.3.1</version>
      </dependency>
      

      【讨论】:

      • 我已经试过了。我已按照seleniumhq.org/download/maven.jsp 的文档进行操作,如果添加 selenium-firefox-driver 依赖项,此依赖项将毫无用处。我忘记了 htmlunit-driver 依赖项,但它仍然不起作用......
      【解决方案4】:

      System.setProperty("webdriver.gecko.driver", System.getProperty("user.dir")+"\\geckodriver.exe"); 添加到您的代码中。

      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.firefox.FirefoxDriver;
      
      public class CheckFireFox {
          public static void main(String[] args) {
              System.setProperty("webdriver.gecko.driver", System.getProperty("user.dir")+"\\geckodriver.exe");
              WebDriver driver = new FirefoxDriver();
              driver.get("http://www.google.com");
              System.out.println("Page title is: " + driver.getTitle());
              driver.quit();
          }
      
      }
      

      pom.xml

      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>StackOverFlow</groupId>
          <artifactId>StackOverFlow</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <build>
              <sourceDirectory>src</sourceDirectory>
              <plugins>
                  <plugin>
                      <artifactId>maven-compiler-plugin</artifactId>
                      <version>3.5.1</version>
                      <configuration>
                          <source>1.8</source>
                          <target>1.8</target>
                      </configuration>
                  </plugin>
              </plugins>
          </build>
          <dependencies>
              <dependency>
                  <groupId>org.seleniumhq.selenium</groupId>
                  <artifactId>selenium-java</artifactId>
                  <version>3.3.1</version>
              </dependency>
          </dependencies>
      </project>
      

      控制台输出:

      Mar 27, 2017 2:39:01 PM org.openqa.selenium.remote.ProtocolHandshake createSession
      INFO: Detected dialect: W3C
      Page title is: Google
      

      【讨论】:

      • 所以它似乎适用于 Windows。我的问题是Linux。它可能取决于操作系统?
      • 它应该也可以在 Linux 上运行,您所要做的就是在 System.setProperty() 中将 geckodriver 和双反斜杠 (\\) 更改为单正斜杠 (/)。
      • 我的 gecko 驱动程序已经在 J​​VM 参数中定义(-Dwebdriver.gecko.driver="/path/to/webdriver")。此外,我已经尝试添加此行,但存在同样的问题。我的问题解决了:需要 selenium-api 依赖——
      【解决方案5】:
      1. 更新 selenium 版本
      2. 下载geckodriver并设置系统路径,例如“F:\geckodriver-v0.20.1-win64”
      3. 将以下代码 sn-p 添加到现有代码中 DesiredCapabilities 能力 = DesiredCapabilities.firefox(); 能力.setCapability("木偶", true);

      现在运行脚本,它会为你工作,希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多