导入 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));
    }