java.lang.NoSuchMethodError:尝试使用 Chromedriver 和 Maven 执行测试时出现 'com.google.common.collect.ImmutableMap 错误

问题描述 投票:0回答:13

我是硒测试的新手,目前正在使用 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
13个回答
15
投票

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

它应该通过 WebDriverManager 版本 5.1.0 修复。

作为替代方案,您还可以使用

<dependencyManagement>
pom.xml
部分来 强制 最新 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 插件以尽早检测传递依赖的多个版本


12
投票

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

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

7
投票

添加以下依赖项后我也遇到了上述问题,它工作得很好。我使用的是Chrome 98版本

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

2
投票

只需添加

    workbook.close();

或者在您的 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>

2
投票

今天查看Guava的master分支,看起来实际问题很简单,没有一个版本的

com.google.common.collect.ImmutableMap.of(...)
接受超过10个参数(线程启动器的错误显示12)。它记录在此处的源代码中:

https://github.com/google/guava/blob/master/guava/src/com/google/common/collect/ImmutableMap.java

这是接受10个条目的版本后的评论:

// looking for of() with > 10 entries? Use the builder or ofEntries instead.

我建议将 Selenium 中 .of() 的用法更改为上面复制的评论中建议的方法之一,因为这对于很多人来说似乎是一个反复出现的问题。

将尝试重新打开此问题以解决此问题: https://github.com/SeleniumHQ/selenium/issues/10324


1
投票

这个错误信息...

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 version / dependency (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
    文件夹可以解决您的问题。


1
投票

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

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


1
投票

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

(5.1.0)

解决显示的问题!

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

1
投票

使用版本4.1.1

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

1
投票
<dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>31.0.1-jre</version>
    </dependency>
<!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager  -->
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.1.0</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.2.0</version>
</dependency>
I used above version in pom.xml.This will help me to come out of this error.

0
投票

我亲自用这些版本解决了这些问题:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.boot.version>1.5.21.RELEASE</spring.boot.version>
</properties>

<dependencies>

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

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

</dependencies>

0
投票

再花3个小时与硒战斗。

这对我有用:

    <selenium.version>4.1.2</selenium.version>
    <selenium-webdrivermanager.version>5.0.1</selenium-webdrivermanager.version>
    <guava.version>31.0.1-jre</guava.version>


    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-leg-rc</artifactId>
        <version>${selenium.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-api</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-chrome-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-remote-driver</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-support</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>${selenium-webdrivermanager.version}</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
    </dependency>

0
投票

当我使用这个依赖项时它解决了。 使用selenium 4.1.1版本。

© www.soinside.com 2019 - 2024. All rights reserved.