java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkState(ZLjava / lang / String;),包含Selenium,gradle和ChromeDriver

问题描述 投票:4回答:3

我正在尝试使用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
3个回答
2
投票

此错误消息...

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();

1
投票

尝试更新你的番石榴

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

它将解决您的问题。


0
投票

我有完全相同的问题(我使用的是Maven)。

我注意到问题是使用com.google.api-clientcom.google.oauth-clientcom.google.apis:google-api-services-sheets中的一个与org.seleniumhq.selenium一起导致错误。

问题是两个依赖关系都依赖于不同的com.google.guava:guava工件。

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

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


0
投票

只是想发布在这里以防万一其他人像我一样从谷歌来到这里。无论出于何种原因,我需要与sudo一起运行。我在使用npm selenium-standalone包并运行时出现问题:

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

它会显示错误。是什么修复它与sudo运行

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

我认为我之前不需要这样做,但突然之间,这是它现在唯一有效的方式。


0
投票

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

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

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