【问题标题】:java.lang.NoClassDefFoundError: org/apache/commons/exec/Executorjava.lang.NoClassDefFoundError: org/apache/commons/exec/Executor
【发布时间】:2021-09-07 21:02:22
【问题描述】:

我正在尝试执行以下代码,但在运行时出现错误“java.lang.NoClassDefFoundError: org/apache/commons/exec/Executor”。我也添加了“Common-Exec jar”文件,但它不起作用。 我需要添加任何其他jar文件吗?

package cross_browser;
import org.testng.annotations.Test;
import org.testng.annotations.Parameters;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;

public class NewTest {
    WebDriver driver;
    String url;

  @BeforeClass
  @Parameters({"browser"})
  public void beforeTest(String browser) {
      url = "https://www.facebook.com";
      if (browser.equalsIgnoreCase("chrome"))
      {
          System.setProperty("webdriver.gecko.driver", "C:\\Users\\Prateek\\Desktop\\Drivers\\geckodriver.exe");
          driver = new FirefoxDriver();
      }
      if (browser.equalsIgnoreCase("firefox"))
      {
          System.setProperty("webdriver.chrome.driver", "C:\\Users\\Prateek\\Desktop\\Drivers\\chromedriver.exe");
          driver = new ChromeDriver();
      }
      driver.manage().window().maximize();    
  }

  @Test
  public void Test() {
      driver.get(url);
      driver.findElement(By.id("email")).sendKeys("Prateek");
      driver.findElement(By.id("password")).sendKeys("Prateek");
      driver.findElement(By.id("login")).click();
  }

  @AfterClass
  public void afterTest() {
      driver.quit();
  }

}

XML 文件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "CrossBrowser Testing" parallel = "tests" thread-count ="2">
<test name = "Chrome Testing">
    <parameter name ="browser" value = "chrome"></parameter>
        <classes>
            <class name = "cross_browser.NewTest"></class>
        </classes>
</test>
<test name = "firefox Testing">
    <parameter name ="browser" value = "firefox"></parameter>
        <classes>
            <class name = "cross_browser.NewTest"></class>
        </classes>
</test>
</suite>

【问题讨论】:

  • TestNG 安装一定有问题。你用什么命令来执行?

标签: java selenium


【解决方案1】:

尝试添加此依赖项,它对我有用

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-exec</artifactId>
    <version>1.3</version>
</dependency>

【讨论】:

    【解决方案2】:

    NoClassDefFoundError

    NoClassDefFoundError 在 Java 中发生在 Java 虚拟机 无法在 runtime 找到特定类时,该类在 可用>编译时间。例如,如果我们解决了来自 classmethod 调用或访问 class 的任何静态成员和该 class em> 在 run-time 期间不可用,然后 JVM 将抛出 NoClassDefFoundError

    您看到的错误是:

    Exception in thread "main" java.lang.NoClassDefFoundError: 
    org/apache/commons/exec/Executor
    

    这清楚地表明 Selenium 正在尝试在运行时从 org/apache/commons/exec/Executor 解析一个特定的类,该类不可访问/不可用。

    出了什么问题:

    您提到了添加 Common-Exec jar,但似乎相关的 ClassMethods编译时间运行时间期间不可用。

    如果存在多个通过 JDK/Maven 解析 ClassesMethods 的来源,则会出现此错误>/Gradle,当使用新的 JAR 文件升级时会出现这种情况。

    解决办法:

    这里有几个步骤可以解决NoClassDefFoundError

    • 如果在 Java 项目 中使用 Selenium JAR,则仅在 Java 构建路径 中添加必需的 External JAR 和删除未使用的/不需要的。
    • Incase 使用构建工具,例如MavenGradle删除所有 外部 JARJava 构建路径MavenGradle 将下载并解析所有必需的依赖项。
    • 如果使用 Selenium JAR,请使用 selenium-java-x.y.z Java Client 而不是使用 selenium-server-standalone -x.y.z.jar 而不是将所有必需的依赖项捆绑在一起。
    • 如果使用 Maven,请使用 &lt;artifactId&gt;selenium-java&lt;/artifactId&gt;&lt;artifactId&gt;selenium-server&lt;/artifactId&gt;。避免同时使用两者。
    • pom.xml 中删除不需要的其他 &lt;dependency&gt;
    • 定期清理 IDE 中的项目工作区,仅用于构建具有所需依赖项的项目。
    • 使用CCleaner 工具定期清除操作系统的杂务。
    • 进行系统重启
    • 如果您正在执行 Maven 项目,请始终执行 maven cleanmaven install,然后执行 maven test强>

    【讨论】:

      【解决方案3】:

      我遇到了同样的错误,我从类路径中删除了 jar 文件并再次添加。我的错误不再出现,我的代码运行并得到了结果

      【讨论】:

        猜你喜欢
        • 2011-07-07
        • 2021-05-20
        • 2017-01-19
        • 1970-01-01
        • 2011-12-02
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多