【问题标题】:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;) with Selenium, gradle and ChromeDriverjava.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;) 与 Selenium、gradle 和 ChromeDriver
【发布时间】:2018-08-07 20:51:54
【问题描述】:

我正在尝试将 Selenium api 与 Gradle 一起使用。这是我的 build.gradle 依赖部分:

dependencies {
    compile 'com.google.api-client:google-api-client:1.23.0'
    compile 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
    compile 'com.google.apis:google-api-services-sheets:v4-rev506-1.23.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version:        '2.9.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '2.9.0' }

我的 selenium - Java 代码:

System.setProperty("webdriver.chrome.driver", "C:\\Program Files(x86)\\Google\\Chrome\\Application\\chrome.exe");
WebDriver driver = new ChromeDriver();

代码运行良好,我可以打开 Chrome 浏览器。 但是,在 build.gradle 中,我使用的是 2.9.0 版本的 selenium 和 chromedriver。如果我尝试使用 2.9.0 之后的任何版本,它会在 WebDriver driver = new ChromeDriver();方法:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
        at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:124)
        at org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:32)
        at org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:137)
        at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:339)
        at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:88)
        at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)
        at Quickstart.main(Quickstart.java:130)

我尝试寻找支持 gradle+Maven+selenium 的版本。找不到任何好的信息。任何想法?

【问题讨论】:

    标签: java selenium gradle selenium-webdriver selenium-chromedriver


    【解决方案1】:

    此错误消息...

    Exception in thread "main" java.lang.NoSuchMethodError:
    com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
    

    ...暗示 Java 客户端 无法找到 ChromeDriver()

    问题与解决方案

    根据您分享的 Selenium - Java 代码System.setProperty() 行用于设置 ChromeDriver 二进制路径不是 chrome 二进制路径。为此,您必须从 ChromeDriver - WebDriver for Chrome 下载 ChromeDriver 二进制文件并将其放置在您的系统中,并通过 System.setProperty() 行提及 ChromeDriver 的绝对路径。因此你必须改变:

    System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
    WebDriver driver = new ChromeDriver();
    

    收件人:

    System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    

    【讨论】:

    • 感谢您的回复!我尝试下载 chromedriver.exe 并使用它而不是 chrome.exe,问题仍然存在。问题是为什么当 build.gradle 具有硒依赖性 2.9.0
    • @SwatiThorve 根据 Selenium Client v3.9.1 的当前版本,selenium dependencies &gt; 2.9.0 非常古老。自 Selenium v​​2.9.0 天以来发生了很多变化。因此,根据最佳实践,您需要将 Selenium ClientChromeDriverChrome 升级到当前级别以获得更好的脚本性能。
    • 感谢德班扬!是的,我知道 2.9.0 非常古老……我也不想使用它。这就是为什么问题:) 当我尝试使用 selenium 2.9+ 时,为什么我在原始帖子中描述了错误?我有最新的 chrome V67 和 chromedriver。还有什么需要检查的吗?
    • 获取所有最新版本的 JDK v8u162Selenium v​​3.9.1ChromeDriver v2.35Chrome v64.x。你会完成的。
    【解决方案2】:

    尝试将您的 Guava 更新为

    <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>27.1-jre</version>
    </dependency>
    

    它会解决你的问题。

    【讨论】:

      【解决方案3】:

      我也有同样的问题(不过我使用的是 Maven)。

      我注意到问题是在org.seleniumhq.selenium 旁边使用com.google.api-clientcom.google.oauth-clientcom.google.apis:google-api-services-sheets 之一会导致错误。

      问题在于这两个依赖项都依赖于不同的com.google.guava:guava 工件。

      为了解决错误,您应该显式依赖单个 com.google.guava:guava 工件。 所以继续在你的build.gradle中添加以下内容:

      compile 'com.google.guava:guava:27.0.1-jre'

      【讨论】:

        【解决方案4】:

        只是想在此处发帖,以防其他人像我一样从 Google 获得此信息。无论出于何种原因,我都需要使用sudo。我在使用 npm selenium-standalone 包并运行时遇到问题:

        /node_modules/selenium-standalone/bin/selenium-standalone start
        

        它会显示该错误。用 sudo 解决了什么问题

        sudo /node_modules/selenium-standalone/bin/selenium-standalone start
        

        我认为我以前不需要这样做,但突然之间,它成了现在唯一可行的方法。

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题并运行了依赖项检查,发现存在冲突。对我有用的解决方案是排除冲突的依赖项。

          您的项目可能与我的项目具有不同的依赖项。因此,列出我项目中的具体冲突可能没有帮助。

          【讨论】:

            【解决方案6】:

            将以下依赖项复制并粘贴到 pom.xml 中,然后进行 maven 构建:

             <dependencies>
                <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>4.12</version>
                  <scope>test</scope>
                </dependency>
            
                  <!-- https://mvnrepository.com/artifact/org.testng/testng -->
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>7.1.0</version>
                <scope>test</scope>
            </dependency>
            
                <!-- https://mvnrepository.com/artifact/io.rest-assured/rest-assured -->
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>rest-assured</artifactId>
                <version>3.0.0</version>
                <scope>test</scope>
            </dependency>
            
                <!-- https://mvnrepository.com/artifact/io.rest-assured/json-path -->
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>json-path</artifactId>
                <version>3.0.0</version>
            </dependency>
            
                <!-- https://mvnrepository.com/artifact/io.rest-assured/json-schema-validator -->
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>json-schema-validator</artifactId>
                <version>3.0.0</version>
            </dependency>
            
            <!-- https://mvnrepository.com/artifact/io.rest-assured/xml-path -->
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>xml-path</artifactId>
                <version>3.0.0</version>
            </dependency>
            
                <!-- https://mvnrepository.com/artifact/org.hamcrest/java-hamcrest -->
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>java-hamcrest</artifactId>
                <version>2.0.0.0</version>
                <scope>test</scope>
            </dependency>
            
            
                <!-- cucumber dependency begins -->
            
            
                <!-- https://mvnrepository.com/artifact/net.masterthought/cucumber-reporting -->
                <dependency>
                <groupId>net.masterthought</groupId>
                <artifactId>cucumber-reporting</artifactId>
                <version>4.7.0</version>
                </dependency>
            
                <!-- starts here -->
                <dependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-core</artifactId>
                    <version>1.2.5</version>
                </dependency>
            
                <dependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-java</artifactId>
                    <version>1.2.5</version>
                    <scope>test</scope>
                </dependency>
            
                <dependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-jvm</artifactId>
                    <version>1.2.5</version>
                    <type>pom</type>
                </dependency>
            
                <dependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-junit</artifactId>
                    <version>1.2.5</version>
                    <scope>test</scope>
                </dependency>
            
                <dependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-jvm-deps</artifactId>
                    <version>1.0.5</version>
                </dependency>
            
                <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-html -->
            <dependency>
                <groupId>info.cukes</groupId>
                <artifactId>cucumber-html</artifactId>
                <version>0.2.3</version>
            </dependency>
            
            <!-- https://mvnrepository.com/artifact/info.cukes/gherkin -->
            <dependency>
                <groupId>info.cukes</groupId>
                <artifactId>gherkin</artifactId>
                <version>2.12.2</version>
                <scope>provided</scope>
            </dependency>
            
            
            <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-testng -->
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-testng</artifactId>
                <version>5.4.2</version>
            </dependency>
            
            <!-- https://mvnrepository.com/artifact/com.theoryinpractise/cucumber-testng-factory -->
            <dependency>
                <groupId>com.theoryinpractise</groupId>
                <artifactId>cucumber-testng-factory</artifactId>
                <version>1.0.1</version>
            </dependency>
            <!--   https://stackoverflow.com/questions/49021707/java-lang-nosuchmethoderror-com-google-common-base-preconditions-checkstatezlj?rq=1  -->
            <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>27.1-jre</version>
            </dependency>
            
              </dependencies>
            

            【讨论】:

            • 如果您能提供更多信息,说明您的解决方案为何以及如何运作/它的作用,将会很高兴。
            【解决方案7】:

            仅添加以下内容是不够的

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

            首先它没有工作。然后我在 pom.xml 中将此依赖项向上移动 比junit依赖,它有效。因此,请确保在 pom 文件中,它高于 junit 或 testng 或您正在使用的任何运行器

            this 帖子中的评论有帮助

            【讨论】:

              【解决方案8】:

              添加 guava 依赖和 chromedriver 版本依赖对我有用 -

              <dependency>
                      <groupId>com.google.guava</groupId>
                      <artifactId>guava</artifactId>
                      <version>25.0-jre</version>
              </dependency>
              <dependency>
                      <groupId>org.seleniumhq.selenium</groupId>
                      <artifactId>selenium-chrome-driver</artifactId>
                      <version>3.141.59</version>
                      <scope>test</scope>
              </dependency>
              

              【讨论】:

                猜你喜欢
                • 2019-01-31
                • 2019-01-22
                • 2015-10-24
                • 1970-01-01
                • 1970-01-01
                • 2020-03-28
                • 1970-01-01
                相关资源
                最近更新 更多