黄瓜-类型不匹配:无法从元素类型Map <object,object>转换为Map <string,string>

时间:2019-05-12 02:01:21

标签: java selenium selenium-webdriver collections cucumber

我正在尝试通过使用多个测试数据在Cucumber DataTable中使用Maps来自动执行场景。在此测试中,我们将两次将用户名和密码传递给测试步骤。因此我们的测试应该输入一次“用户名和密码”,单击“登录”按钮,然后再次重复相同的步骤。

我尝试使用for循环重复使用Maps集合进行测试。 1.我收到一条错误消息,指出类型不匹配:无法从元素类型Map<Object,Object> to Map<String,String>转换 2.将其转换为Map<Object, Object>时,出现另一个错误,提示WebElement类型的sendKeys(CharSequence ...)方法不适用于参数(对象)

    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 实际-类型不匹配:无法从元素类型Map转换为Map

2 个答案:

答案 0 :(得分:2)

您可以先尝试将结果分配给中间变量吗?

List<Map<String, String>> rows = userCredentials.asMaps(String.class,  String.class);
for (Map<String, String> data : rows) {
  ...
}

答案 1 :(得分:2)

您应按照以下建议的实现方式修改代码。

@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"));
}
}