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

时间:2018-02-28 03:54:41

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

我正在尝试将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支持的版本。无法找到任何好消息。任何的想法?

6 个答案:

答案 0 :(得分: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()

问题&amp;溶液

根据您共享的 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 :(得分:0)

尝试将您的番石榴更新为

let html = arr.reduce((all, one) => all += one.toHTML(), '');

它将解决您的问题。

答案 2 :(得分:0)

只想在这里发帖,以防其他人像我一样从Google那里找到它。无论出于什么原因,我都需要运行sudo。使用npm selenium-standalone软件包并运行时出现问题:

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

它将显示该错误。修复了使用sudo运行的问题

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

我认为我以前不需要这样做,但是突然之间,这是目前唯一的工作方式。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

将以下依赖项复制并粘贴到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>

答案 5 :(得分:0)

仅添加以下内容是不够的

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

它首先没有工作。然后我在pom.xml中将此依赖关系上移了 比junit的依赖,它的工作原理。因此,请确保pom文件中的文件高于junit或testng或您使用的任何运行程序

this帖子中的评论有所帮助