使用 Cucumber DataTable 更新表单
Updating a form using cucumber DataTable
我正在使用 DataTable 更新表单。如何在同一步骤中更新每个字段中的表单并在下一步验证更新后的表单?
这是我创建的功能文件
Scenario Outline: Update Entry
And I update entry
| fname | <fname> |
| lname | <lname> |
| email | <email> |
| number | <number> |
| gender | <gender> |
Examples:
|fname |lname |email |number |gender |
|AAA |bbb |aa@aa.com |987654321 |male |
这是我创建的步骤定义:(我知道这是错误的。我一直在思考这个步骤如何能够根据我声明的示例填充每个文本框。)
@Then("^I update entry$")
public void i_enter_new_entry(DataTable dt) throws Throwable {
Map<String,String> m = dt.asMap(String.class,String.class);
System.out.println("\nFilling form with below data\n");
for( String k : m.keySet())
{
System.out.println("Key -> " + k + " Value -> " + m.get(k));
enterText(fname_textbox, m.get(k));
enterText(lname_textbox, m.get(k));
enterText(email_textbox, m.get(k));
enterText(number_textbox, m.get(k));
enterText(gender_textbox, m.get(k));
}
}
基本上我的问题是,根据场景大纲,我想更新每个文本框中的条目。
请指教如何做到这一点。我需要做 getter 和 setter 来存储数据吗?
试试这个。 (你需要导入cucumber.api.DataTable;)
@And("^I update entry$")
public void updateEntry(DataTable args) {
List<String> elements = new ArrayList<>();
List<String> values = new ArrayList<>();
LinkedHashMap<String, String> dataTableValues = new LinkedHashMap<>();
for (int i = 0; i < args.getPickleRows().size(); i++) {
elements.add(args.getPickleRows().get(i).getCells().get(0).getValue());
values.add(args.getPickleRows().get(i).getCells().get(1).getValue());
dataTableValues.put(elements.get(i), values.get(i));
}
for (int i = 0; i < elements.size(); i++) {
WebElement textbox = null;
switch (elements.get(i)) {
case "fname":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
case "lname":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
case "email":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
case "number":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
case "gender":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
default:
fail("'" + elements.get(i) + "' is not part of the common DataTable arguments!");
break;
}
textbox.sendKeys(values.get(i));
}
}
我正在使用 DataTable 更新表单。如何在同一步骤中更新每个字段中的表单并在下一步验证更新后的表单?
这是我创建的功能文件
Scenario Outline: Update Entry
And I update entry
| fname | <fname> |
| lname | <lname> |
| email | <email> |
| number | <number> |
| gender | <gender> |
Examples:
|fname |lname |email |number |gender |
|AAA |bbb |aa@aa.com |987654321 |male |
这是我创建的步骤定义:(我知道这是错误的。我一直在思考这个步骤如何能够根据我声明的示例填充每个文本框。)
@Then("^I update entry$")
public void i_enter_new_entry(DataTable dt) throws Throwable {
Map<String,String> m = dt.asMap(String.class,String.class);
System.out.println("\nFilling form with below data\n");
for( String k : m.keySet())
{
System.out.println("Key -> " + k + " Value -> " + m.get(k));
enterText(fname_textbox, m.get(k));
enterText(lname_textbox, m.get(k));
enterText(email_textbox, m.get(k));
enterText(number_textbox, m.get(k));
enterText(gender_textbox, m.get(k));
}
}
基本上我的问题是,根据场景大纲,我想更新每个文本框中的条目。
请指教如何做到这一点。我需要做 getter 和 setter 来存储数据吗?
试试这个。 (你需要导入cucumber.api.DataTable;)
@And("^I update entry$")
public void updateEntry(DataTable args) {
List<String> elements = new ArrayList<>();
List<String> values = new ArrayList<>();
LinkedHashMap<String, String> dataTableValues = new LinkedHashMap<>();
for (int i = 0; i < args.getPickleRows().size(); i++) {
elements.add(args.getPickleRows().get(i).getCells().get(0).getValue());
values.add(args.getPickleRows().get(i).getCells().get(1).getValue());
dataTableValues.put(elements.get(i), values.get(i));
}
for (int i = 0; i < elements.size(); i++) {
WebElement textbox = null;
switch (elements.get(i)) {
case "fname":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
case "lname":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
case "email":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
case "number":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
case "gender":
textbox = driver.findElement(By.cssSelector("your selector here"));
break;
default:
fail("'" + elements.get(i) + "' is not part of the common DataTable arguments!");
break;
}
textbox.sendKeys(values.get(i));
}
}