Я пытаюсь автоматизировать DataTables в Cucumber, где я написал соответствующую функцию и определение шага для того же. Eclipse предлагает импортировать io.cucumber.datatable.DataTable; и когда я использую метод raw(), eclipse выдает ошибку, говорящую: «Метод raw() не определен для типа 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>
Ожидается - решить проблемы с импортом и импортировать огурец.api.DataTable;
Фактически - Eclipse предлагает импортировать import io.cucumber.datatable.DataTable; для DataTable, и когда я импортирую то же самое, я не могу использовать метод raw().
Я изменил его на asLists(), и это сработало. Но является ли это стандартным способом написания кода для DataTables в огурце? table.raw()-> Превратить таблицу в массив массивов table.asLists()-> Возвращает ячейки таблицы
Лучше изменить аргументы метода на List<List<String>>. Позвольте огурцу обрабатывать преобразования.


I. вариант
https://mvnrepository.com/artifact/io.cucumber/datatable-dependencies/1.1.12https://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>
II. вариант Попробуйте обновить зависимости огурца-ядра и огурца 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/огурец-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. Надеюсь это поможет
Здравствуйте @eugene спасибо за ваши предложения. Я пытаюсь использовать банки, а также обновляю зависимости maven огурца-ядра и огурца-java. Но проблема все еще сохраняется. я должен попробовать использовать внешние банки?
Главный пункт: Люди столкнулись с несколькими ошибками (упомянутыми ниже), поскольку они смешивают прямые и транзитивные зависимости. Поэтому мы не будем смешивать прямые и транзитивные зависимости, особенно их версии! Это может привести к непредсказуемому результату.
Решение: Удалите огурец-ява, сердцевина огурца, огурец-JVM-депс, корнишон и июнь. Они являются транзитивными зависимостями и будут предоставлены вашими зависимостями. Вы можете добавить ниже набор минимальных зависимостей огурца.
<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>
Особенность: Затем пользователь вводит имя пользователя и пароль | мнгр193115 | Эдитада |
Из вашего вопроса то, что было указано выше, было файлом функции, который вы использовали. Я согласен с тем, что вы должны выполнить импорт для данных, и перед этим вы можете изменить файл функции на приведенный ниже, если нет.
Особенность: проверить UN и Pwd
Сценарий: Название сценария
Затем пользователь вводит имя пользователя и пароль
| мнгр193115 | Эдитада |
Если вы используете io.cucumber вместо импорта cucumber.api, используйте метод cells(), который является альтернативой методу raw() в пакете io.cucumber.
Пример:
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
Измените аргументы метода с DataTable на List<List<String>>. Огурец справится с этим автоматически. Или вы можете использовать asLists() вместо raw().