导入 cucumber.api.DataTable;无法解决
import cucumber.api.DataTable; cannot be resolved
我正在尝试在 Cucumber 中自动化 DataTables,我已经为此编写了适当的功能和步骤定义。
Eclipse 建议导入 io.cucumber.datatable.DataTable;当我使用 raw() 方法时,eclipse 会抛出一条错误消息 "The method raw() is undefined for the type DataTable"
Feature : Then user enters username and password
| mngr193115 | edytadA |
步骤定义:
@Then("^user enters username and password$")
public void user_enters_username_and_password(DataTable credentials) {
//driver.findElement(By.linkText("ACCOUNT")).click();
List<List<String>> data = credentials.raw();
driver.findElement(By.xpath("//input[@type='text']")).sendKeys();
driver.findElement(By.name("password")).sendKeys(password);
}
下面是我的 POM.xml 文件
<dependencies>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>4.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-jvm -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-jvm</artifactId>
<version>4.3.0</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-junit -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-jvm-deps -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.6</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/net.masterthought/cucumber-reporting -->
<dependency>
<groupId>net.masterthought</groupId>
<artifactId>cucumber-reporting</artifactId>
<version>4.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-core -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
<version>3.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/gherkin -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>gherkin</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-picocontainer -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
预计 - 解决导入问题并导入 cucumber.api.DataTable;
实际 - Eclipse 建议导入 import io.cucumber.datatable.DataTable;对于 DataTable,当我导入它时,我无法使用 raw() 方法。
我。选项
https://mvnrepository.com/artifact/io.cucumber/datatable-dependencies/1.1.12
https://mvnrepository.com/artifact/io.cucumber/datatable/1.0.3
<!-- https://mvnrepository.com/artifact/io.cucumber/datatable-dependencies -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>datatable-dependencies</artifactId>
<version>1.1.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/datatable -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>datatable</artifactId>
<version>1.0.3</version>
</dependency>
二.选项
尝试将 cucumber-core 和 cucumber java 依赖项更新到最新版本:
https://mvnrepository.com/artifact/io.cucumber/cucumber-core/4.3.1
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
<version>4.3.1</version>
</dependency>
https://mvnrepository.com/artifact/io.cucumber/cucumber-java
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>4.3.1</version>
</dependency>
然后 - 重新导入 maven。
希望这有帮助
要点:人们在混合直接依赖和传递依赖时遇到了一些错误(如下所述)。所以我们不应该混合直接和传递依赖,特别是他们的版本!这样做会导致不可预知的结果。
- 无法解析导入cucumber.api.junit
- java.lang.NoClassDefFoundError: gherkin/IGherkinDialectProvider
- 进口cucumber.api.DataTable;无法解决
解决方法:请去掉cucumber-java,cucumber-core , cucumber-jvm-deps, 小黄瓜 & junit.它们是传递依赖项,将由您的依赖项提供。您可以添加以下一组最小黄瓜依赖项。
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
功能:然后用户输入用户名和密码
| mngr193115 | edytadA |
根据你的问题,上面提到的是你使用的功能文件。
我同意您必须对数据表进行导入,在此之前,您可以将功能文件更改为以下内容吗
功能:检查联合国和密码
场景:场景名称
然后用户输入用户名和密码
| mngr193115 | edytadA |
如果您使用 io.cucumber 而不是 cucumber.api 导入,则使用 cells()
方法,它是 io.cucumber
包中 raw()
方法的替代方法。
示例:
List<List<String>> testData = data.cells();
System.out.println(testData.get(0).get(0)); //displays the first element of dataTable //of 0th row and 0th column
我在使用 raw() 时也遇到了问题,所以我将其改为 cells() 效果很好
@And("^I enter following for login$")
public void iEnterFollowingForLogin(DataTable table) throws Throwable{
List<List<String>> data = table.cells();
System.out.println("Username: "+data.get(1).get(0));
System.out.println("Password: "+data.get(1).get(1));
}
我正在尝试在 Cucumber 中自动化 DataTables,我已经为此编写了适当的功能和步骤定义。 Eclipse 建议导入 io.cucumber.datatable.DataTable;当我使用 raw() 方法时,eclipse 会抛出一条错误消息 "The method raw() is undefined for the type DataTable"
Feature : Then user enters username and password
| mngr193115 | edytadA |
步骤定义:
@Then("^user enters username and password$")
public void user_enters_username_and_password(DataTable credentials) {
//driver.findElement(By.linkText("ACCOUNT")).click();
List<List<String>> data = credentials.raw();
driver.findElement(By.xpath("//input[@type='text']")).sendKeys();
driver.findElement(By.name("password")).sendKeys(password);
}
下面是我的 POM.xml 文件
<dependencies>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>4.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-jvm -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-jvm</artifactId>
<version>4.3.0</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-junit -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-jvm-deps -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.6</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/net.masterthought/cucumber-reporting -->
<dependency>
<groupId>net.masterthought</groupId>
<artifactId>cucumber-reporting</artifactId>
<version>4.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-core -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
<version>3.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/gherkin -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>gherkin</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-picocontainer -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
预计 - 解决导入问题并导入 cucumber.api.DataTable;
实际 - Eclipse 建议导入 import io.cucumber.datatable.DataTable;对于 DataTable,当我导入它时,我无法使用 raw() 方法。
我。选项
https://mvnrepository.com/artifact/io.cucumber/datatable-dependencies/1.1.12 https://mvnrepository.com/artifact/io.cucumber/datatable/1.0.3
<!-- https://mvnrepository.com/artifact/io.cucumber/datatable-dependencies -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>datatable-dependencies</artifactId>
<version>1.1.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/datatable -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>datatable</artifactId>
<version>1.0.3</version>
</dependency>
二.选项 尝试将 cucumber-core 和 cucumber java 依赖项更新到最新版本: https://mvnrepository.com/artifact/io.cucumber/cucumber-core/4.3.1
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
<version>4.3.1</version>
</dependency>
https://mvnrepository.com/artifact/io.cucumber/cucumber-java
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>4.3.1</version>
</dependency>
然后 - 重新导入 maven。 希望这有帮助
要点:人们在混合直接依赖和传递依赖时遇到了一些错误(如下所述)。所以我们不应该混合直接和传递依赖,特别是他们的版本!这样做会导致不可预知的结果。
- 无法解析导入cucumber.api.junit
- java.lang.NoClassDefFoundError: gherkin/IGherkinDialectProvider
- 进口cucumber.api.DataTable;无法解决
解决方法:请去掉cucumber-java,cucumber-core , cucumber-jvm-deps, 小黄瓜 & junit.它们是传递依赖项,将由您的依赖项提供。您可以添加以下一组最小黄瓜依赖项。
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
功能:然后用户输入用户名和密码 | mngr193115 | edytadA |
根据你的问题,上面提到的是你使用的功能文件。 我同意您必须对数据表进行导入,在此之前,您可以将功能文件更改为以下内容吗
功能:检查联合国和密码
场景:场景名称
然后用户输入用户名和密码
| mngr193115 | edytadA |
如果您使用 io.cucumber 而不是 cucumber.api 导入,则使用 cells()
方法,它是 io.cucumber
包中 raw()
方法的替代方法。
示例:
List<List<String>> testData = data.cells();
System.out.println(testData.get(0).get(0)); //displays the first element of dataTable //of 0th row and 0th column
我在使用 raw() 时也遇到了问题,所以我将其改为 cells() 效果很好
@And("^I enter following for login$")
public void iEnterFollowingForLogin(DataTable table) throws Throwable{
List<List<String>> data = table.cells();
System.out.println("Username: "+data.get(1).get(0));
System.out.println("Password: "+data.get(1).get(1));
}