![](/img/trans.png)
[英]java.lang.NoClassDefFoundError: org/apache/commons/lang/text/StrLookup
[英]java.lang.NoClassDefFoundError: org/apache/commons/exec/Executor
我正在尝试执行以下代码,但在运行时出现错误“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>
当Java 虚拟机无法在运行时找到在编译时可用的特定类时,就会发生Java 中的NoClassDefFoundError
。 例如,如果我们已经解决了从一个类的方法调用或访问任何类的静态成员,并且该类在运行时不可用,JVM将抛出NoClassDefFoundError错误。
您看到的错误是:
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/exec/Executor
这清楚地表明Selenium试图在运行时从org/apache/commons/exec/Executor
解析一个无法访问/可用的特定类。
您已经提到添加Common-Exec jar,但似乎相关的类或方法是在Compile Time期间从一个来源解析的,而在Run Time期间不可用。
如果存在通过JDK / Maven / Gradle解析类和方法的多个源,并且在使用新 JAR文件升级时会发生这种情况,则会发生此错误。
以下是解决NoClassDefFoundError
的几个步骤:
<artifactId>selenium-java</artifactId>
或<artifactId>selenium-server</artifactId>
。 避免同时使用两者。<dependency>
maven clean
、 maven install
和maven test
尝试添加此依赖项,它对我有用
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-exec</artifactId>
<version>1.3</version>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.