【问题标题】:NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;) while executing tests through CLI with ChromeDriver and ChromeNoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;) 在通过 CLI 使用 ChromeDriver 和 Chrome 执行测试时
【发布时间】:2018-08-07 14:28:05
【问题描述】:

我有一个 TestNG 测试,在 Eclipse 中作为 TestNG Suite 运行时按预期工作,但通过命令行运行时失败。我看到它无法启动浏览器但类路径设置正常工作的问题,因为我刚刚打印了没有 webdriver 代码的 helloworl。谁能帮助我这里缺少什么

package testngex;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;
import org.testng.annotations.Test;

public class Login {

    @Test

    public void main() {

        WebDriver driver=new ChromeDriver();
        driver.manage().window().maximize();
        //Implicit wait
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
           driver.get("url");
        driver.findElement(By.id("Username")).sendKeys("xxx");
        driver.findElement(By.id("Password")).sendKeys("xxx);
        driver.findElement(By.id("imgbtnLogin")).click();
        driver.quit();

    }
}

XML 文件

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 <suite name="Suite">
  <test thread-count="5" name="Test">
    <classes>
      <class name="testngex.Login"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

错误测试

testngex.Login#main
Exception
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:125)
  at org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:35)
  at org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:156)
  at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:346)
  at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:91)
  at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)
  at testngex.Login.main(Login.java:17)
... Removed 24 stack frames

【问题讨论】:

  • 请发布错误以表示失败。谢谢
  • 我看到它此时失败了 WebDriver driver=new ChromeDriver();

标签: java google-chrome selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

使用 Maven Surefire 插件。并使用模式让它像这样识别你的测试类......

mvn -Dtest=test* test

【讨论】:

  • 使用 Maven 将如何解决 OP 的 NoSuchMethodError 问题?另外:您确定使用“-Dtest=test*”会让 Surefire 识别您的测试类吗?
【解决方案2】:

此错误消息...

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

...暗示 JVM 无法找到必要的 WebDriver 变体,即 ChromeDriver 来启动新会话。

您的主要问题是,您没有向 JVM 提及 ChromeDriver 的位置。因此出现错误。

解决方案

在代码开头添加System.setProperty() 行:

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

【讨论】:

  • @Debanjan- 添加了代码但仍然是同样的问题。如果在 Eclipse 中运行,一切正常,但如果我从命令提示符运行,则测试失败。
猜你喜欢
  • 2018-08-07
  • 1970-01-01
  • 2017-12-28
  • 2020-09-06
  • 2019-01-31
  • 1970-01-01
  • 2019-01-22
相关资源
最近更新 更多