我正在使用Cucumber / Selenium / java并尝试使用TestRunner运行测试方案,但是出现以下错误。调查了一下,似乎添加了黄瓜核心依赖项可能解决了这个问题。然后,DataTable发生了新的错误。这是在pom中没有黄瓜核心依赖性的错误:
java.lang.NoClassDefFoundError: io/cucumber/core/options/FeatureOptions
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3138)
at java.base/java.lang.Class.getConstructor0(Class.java:3343)
at java.base/java.lang.Class.getConstructor(Class.java:2152)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.ClassNotFoundException: io.cucumber.core.options.FeatureOptions
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 14 more
这是我的功能文件代码:
Feature: LoginFeature
This deals with logging in
Scenario: Log in with correct username
Given I navigate to the login page
And I enter the following login details:
| username | password |
| cukey | passwoid |
And I click the login button
Then I should land on the newest page
这是我的步骤定义:
package Steps;
import Base.BaseUtil;
import Pages.LoginPageObjeks;
import cucumber.api.DataTable;
import cucumber.api.PendingException;
import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.ArrayList;
import java.util.List;
public class MaStepdefs extends BaseUtil {
private BaseUtil base;
public MaStepdefs(BaseUtil base) {
this.base = base;
}
@And("^I click the login button$")
public void iClickTheLoginButton() throws Throwable {
LoginPageObjeks page = new LoginPageObjeks(base.Driver);
page.ClickLogin();
}
@Given("^I navigate to the login page$")
public void iNavigateToTheLoginPage() throws Throwable {
base.Driver.navigate().to("http://www.executeautomation.com/demosite/Login.html");
}
@And("^I enter the following login details:$")
public void iEnterTheFollowingLoginDetails(DataTable table) throws Throwable {
List<User> users = new ArrayList<User>();
users = table.asList(User.class);
LoginPageObjeks page = new LoginPageObjeks(base.Driver);
for (User user : users) {
page.Login(user.username, user.password);
//base.Driver.findElement(By.name("UserName")).sendKeys(user.username);
//base.Driver.findElement(By.name("Password")).sendKeys(user.password);
Thread.sleep(2000);
}
}
@Then("^I should land on the newest page$")
public void iShouldLandOnTheNewestPage () throws Throwable {
Assert.assertEquals("It's not displayed", base.Driver.findElement(By.id("Initial")).isDisplayed(), true);
}
}
class User {
public String username;
public String password;
public User(String userName, String passWord) {
username = userName;
password = passWord;
}
}
这是我的pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>ownCukes</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>3.2.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-picocontainer -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>4.2.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.2.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.2.6</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-core -->
</dependencies>
</project>
最后是我的TestRunner类:
package Runner;
import cucumber.api.CucumberOptions;
import org.junit.runner.RunWith;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(features = {"src/test/java/features"}, glue = "Steps")
public class TestRunner {
}
在添加了黄瓜核心依赖之后,我得到了错误-DataTable的“ java:无法找到符号”。黄瓜芯干扰了DataTable吗?我应该完全拿黄瓜芯吗?有人可以帮忙吗?抱歉,我知道这有点长。