我正在尝试执行以下代码,但在运行时收到错误“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>
答案 0 :(得分:1)
NoClassDefFoundError
编译时间。例如,如果我们已经解析了来自类的方法调用或访问类的任何静态成员以及类在运行时期间不可用,然后 JVM 将抛出 NoClassDefFoundError 。
您看到的错误是:
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/exec/Executor
这清楚地表明 Selenium 试图在运行时从org/apache/commons/exec/Executor
解析特定的类,这是不可访问/可用的。
您已经提到添加 Common-Exec jar ,但似乎在 Class 或 Methods >编译时间在运行时期间不可用。
如果存在多个源以通过 JDK / Maven 来解析类和方法,则会发生此错误> / Gradle ,使用新JAR 文件进行升级时会出现这种情况。
以下是解决 NoClassDefFoundError
的几个步骤:
<artifactId>selenium-java</artifactId>
或 <artifactId>selenium-server</artifactId>
。避免同时使用两者。<dependency>
maven clean
, maven install
,然后 { {1}} 强> 答案 1 :(得分:0)
尝试添加此依赖项,它对我有用
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-exec</artifactId>
<version>1.3</version>
</dependency>