【问题标题】:java.lang.NoSuchMethodError: 'com.google.common.collect.ImmutableMap error when trying to execute tests using Chromedriver and Mavenjava.lang.NoSuchMethodError: 'com.google.common.collect.ImmutableMap 尝试使用 Chromedriver 和 Maven 执行测试时出错
【发布时间】:2022-06-15 15:44:22
【问题描述】:

我是 selenium 测试的新手,我目前正在使用 maven 观看一些 youtube 视频。

今天我尝试了一些代码并且工作正常,但是当访问一个商店页面并尝试搜索产品时,它给了我“拒绝访问”消息 所以我尝试了几种打开chrome而不是chromedriver的方法。

但我放弃了,愿意尝试另一个网页。但现在 chromedriver 无法打开(给出错误消息)。 operadriver、geckodriver 等启动后会立即关闭。

我收到此错误:

java.lang.NoSuchMethodError: 'com.google.common.collect.ImmutableMap com.google.common.collect.ImmutableMap.of(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)'

我尝试了很多地方,但大多数人都说它是番石榴版本,我不使用番石榴,即使我尝试将它添加到依赖项......

我的代码是这样的:

public class TestYoutubeClass {
    WebDriver driver;
    @Before
    public void runDriver(){
        WebDriver driver = new ChromeDriver();
        driver.get("http://www.kabum.com.br");

我尝试从头开始,但没有任何效果。 我正在使用 IntelliJ 在pom.xml 我添加了:junit; selenium-java 和webdrivermanager。

非常感谢每一个帮助。

【问题讨论】:

    标签: java selenium maven selenium-webdriver nosuchmethoderror


    【解决方案1】:

    我正在使用 maven 并将版本 4.1.2 降级到 4.1.1 解决了我的问题

    <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>4.1.1</version>
    </dependency>
    

    【讨论】:

    • 您使用的是什么版本的 webdrivermanager?
    【解决方案2】:

    问题来自于 Guava(传递依赖)版本冲突。

    应该用WebDriverManager version 5.1.0修复。

    作为替代方案,您也可以使用 pom.xml 的 &lt;dependencyManagement&gt; 部分来强制解决最新的 Guava 版本:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
          <version>31.0.1-jre</version>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    或从 WebDriverManager 中排除 Guava 依赖项(>= 5.1.0 不再需要):

    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>5.0.3</version>
        <exclusions>
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    PS:为确保您的 Maven 项目的依赖收敛,请考虑尽早添加传递依赖的 Maven Enforcer Plugin to detect multiple versions。

    【讨论】:

      【解决方案3】:

      此错误消息...

      java.lang.NoSuchMethodError: 'com.google.common.collect.ImmutableMap com.google.common.collect.ImmutableMap.of(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)'
      

      ...暗示有 NoSuchMethod 为com.google.common.collect.ImmutableMap,这表明它可能已损坏或您专门与 guava 版本 / 依赖 (maven)。


      您需要注意以下几点:

      • 您需要添加System.setProperty():

        System.setProperty("webdriver.gecko.driver","C:\\Program Files\\Java\\jre1.8.0_231\\lib\\ext\\geckodriver.exe");
        
      • 仅使用 WebDriver 的单个实例,无论是来自 class 范围还是来自 method 范围。

      • 实际上,您的代码行将是;

        public class TestYoutubeClass {
            WebDriver driver;
            @Before
            public void runDriver(){
                System.setProperty("webdriver.chrome.driver","/path/to/chromedriver");
                driver = new ChromeDriver();
                driver.get("http://www.kabum.com.br");
        
      • 如果您使用,删除损坏/不兼容的.m2 文件夹可以解决您的问题。

      【讨论】:

        【解决方案4】:

        似乎在 5.0.x 版本的 webdrivermanager 中存在错误,请参阅此线程中的最后两条消息 - https://github.com/bonigarcia/webdrivermanager/issues/576

        尝试将 webdrivermanager 依赖版本切换到 4.4.3,对我有用。

        【讨论】:

        • webdrivermanager 已经更新,现在看来这个问题已经在 5.1.0 版本中修复了。
        【解决方案5】:

        在添加以下依赖项后,我也遇到了上述问题,它运行良好。我使用的是 Chrome 98 版本

        <dependencies>
            <dependency>
              <groupId>com.google.guava</groupId>
              <artifactId>guava</artifactId>
              <version>31.0.1-jre</version>
            </dependency>
          </dependencies>
        

        【讨论】:

          【解决方案6】:

          如果您使用的是 Maven pom.xml 文件,那么 检查 5.1.0 以下的 WebDriverManager 的版本。 我用的是下面的版本

          (5.1.0)

          解决显示的问题!

          <dependency>
              <groupId>io.github.bonigarcia</groupId>
              <artifactId>webdrivermanager</artifactId>
              <version>5.1.0</version>
          </dependency>
          

          【讨论】:

            【解决方案7】:

            使用版本 4.1.1

            <dependency>
                    <groupId>org.seleniumhq.selenium</groupId>
                    <artifactId>selenium-java</artifactId>
                    <version>4.1.1</version>
                </dependency>
            

            【讨论】:

              【解决方案8】:

              在你的 pom.xml 中试试这个,它对我有用

                  <dependency>
                      <groupId>com.google.guava</groupId>
                      <artifactId>guava</artifactId>
                      <version>31.0.1-jre</version>
                  </dependency>
                  <dependency>
                      <groupId>org.seleniumhq.selenium</groupId>
                      <artifactId>selenium-java</artifactId>
                      <version>4.2.0</version>
                  </dependency>
              
                  <dependency>
                      <groupId>io.github.bonigarcia</groupId>
                      <artifactId>webdrivermanager</artifactId>
                      <version>5.0.1</version>
                  </dependency>
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-01-02
                • 1970-01-01
                • 2021-11-30
                • 2013-10-25
                • 2019-01-14
                • 2017-02-04
                • 2018-01-31
                • 1970-01-01
                相关资源
                最近更新 更多