Огурец - Несоответствие типов: невозможно преобразовать из типа элемента Картана карту - PullRequest
1 голос
/ 12 мая 2019

Я пытаюсь автоматизировать сценарий с помощью Maps в Cucumber DataTable, используя несколько тестовых данных. В этом тесте мы дважды передадим имя пользователя и пароль на шаг теста. Таким образом, наш тест должен ввести имя пользователя и пароль один раз, нажать кнопку «Войти» и повторить те же шаги еще раз.

Я пытался использовать цикл for, чтобы повторить тест с использованием коллекции Карт. 1. Я получаю сообщение об ошибке «Несоответствие типов»: невозможно преобразовать тип элемента Map<Object,Object> to Map<String,String> 2. Когда я конвертирую его в Map<Object, Object>, я получаю еще одну ошибку, в которой говорится, что метод sendKeys (CharSequence ...) в типе WebElement не применим для аргументов (Object)

    Feature File Scenario
    Scenario: Successful Login with Valid Credentials
     Given User is on Home Page
     When User Navigate to LogIn Page
     And User enters Credentials to LogIn
     | Username   | Password |
        | testuser_1 | Test@153 |
        | testuser_2 | Test@154 |
     Then Message displayed Login Successfully

Step Definition
//Maps in Data Tables with Multiple Test Data


    @Then("^user enters Credentials in LogIn$")
        public void user_enters_username_and_password(DataTable userCredentials) throws Throwable {
            //Write the code to handle Data Table
             for (Map<String, String> data : userCredentials.asMaps(String.class, String.class) ) {
            driver.findElement(By.xpath("//input[@type='text']")).sendKeys(data.get("username"));
            driver.findElement(By.name("password")).sendKeys(data.get("password"));
            }
        }

Ожидается - преобразовать тип элемента Map в Map Actual - Несоответствие типов: невозможно преобразовать тип элемента Map в Map

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Вы должны изменить свой код в соответствии с предложенной ниже реализацией.

@Then("^user enters Credentials in LogIn$") 
public void user_enters_username_and_password(DataTable userCredentials) throws Throwable {
List<Map<String, String>> list = userCredentials.asMaps(String.class,String.class);
for (Map<String, String> data : list)
{
driver.findElement(By.xpath("//input[@type='text']")).sendKeys(data.get("username"));
driver.findElement(By.name("password")).sendKeys(data.get("password"));
}
}
2 голосов
/ 12 мая 2019

Можете ли вы сначала попытаться присвоить результат промежуточной переменной?

List<Map<String, String>> rows = userCredentials.asMaps(String.class,  String.class);
for (Map<String, String> data : rows) {
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...