Cucumber - 类型不匹配:无法从元素类型 Map<Object,Object> 转换为 Map<String,String>
Cucumber - Type mismatch: cannot convert from element type Map<Object,Object> to Map<String,String>
我正在尝试通过使用多个测试数据在 Cucumber DataTable 中使用地图来自动化场景。在此测试中,我们将两次将用户名和密码传递给测试步骤。所以我们的测试应该输入一次用户名和密码,点击登录按钮并再次重复相同的步骤。
我尝试使用 for 循环重复使用地图集合的测试。
1. 我收到一条错误消息,提示类型不匹配:无法从元素类型 Map<Object,Object> to Map<String,String>
转换
2. 当我将其转换为 Map<Object, Object>
时,我收到另一个错误提示 The method sendKeys(CharSequence...) in the type WebElement is not applicable for the arguments (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
实际 - 类型不匹配:无法从元素类型 Map 转换为 Map
能不能先把结果赋值给中间变量?
List<Map<String, String>> rows = userCredentials.asMaps(String.class, String.class);
for (Map<String, String> data : rows) {
...
}
您应按照以下建议的实施方式修改您的代码。
@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"));
}
}
我正在尝试通过使用多个测试数据在 Cucumber DataTable 中使用地图来自动化场景。在此测试中,我们将两次将用户名和密码传递给测试步骤。所以我们的测试应该输入一次用户名和密码,点击登录按钮并再次重复相同的步骤。
我尝试使用 for 循环重复使用地图集合的测试。
1. 我收到一条错误消息,提示类型不匹配:无法从元素类型 Map<Object,Object> to Map<String,String>
转换
2. 当我将其转换为 Map<Object, Object>
时,我收到另一个错误提示 The method sendKeys(CharSequence...) in the type WebElement is not applicable for the arguments (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 实际 - 类型不匹配:无法从元素类型 Map 转换为 Map
能不能先把结果赋值给中间变量?
List<Map<String, String>> rows = userCredentials.asMaps(String.class, String.class);
for (Map<String, String> data : rows) {
...
}
您应按照以下建议的实施方式修改您的代码。
@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"));
}
}