- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 cucumber 数据表:
When I populate a field with a new value
| FieldName | FieldValue |
| Name | Joe Blogs |
| Email address | jblogs@gmail.com |
| Phone 1 | 04 555 6666 |
| Phone 2 | 0800 123 4567 |
| SMS Phone | 023 222 333 |
| Fax number | 09 888 9999 |
| Location | Bermuda Triangle |
使用以下 java 类:
@When("^I populate a field with a new value$")
public void ShouldPopulateFieldsWithValues(DataTable arg1) throws Throwable {
List<Map<String,String>> data=arg1.asMaps(String.class,String.class);
//Declare a string variable for NAME and assign it's value
String profileNameTextboxValue = data.get(0).get("FieldValue");
//Find the profile NAME text box
WebElement profileNameTextbox = driver.findElement(By.id("name"));
//Clear the value from the profile NAME text box
profileNameTextbox.clear();
//Send the string value to the profile NAME text box
profileNameTextbox.sendKeys(profileNameTextboxValue);
//Declare a string variable for EMAIL and assign it's value
String profileEmailValue = data.get(1).get("FieldValue");
//Find the profile EMAIL text box
WebElement profileEmailTextbox = driver.findElement(By.id("email"));
//Clear the value from the profile EMAIL text box
profileEmailTextbox.clear();
//Send the string value to the profile EMAIL text box
profileEmailTextbox.sendKeys(profileEmailValue);
//Declare a string variable for PHONE1 and assign it's value
String profilePhone1Value = data.get(2).get("FieldValue");
//Find the profile PHONE1 text box
WebElement profilePhone1Textbox = driver.findElement(By.id("phone"));
//Clear the value from the profile PHONE1 text box
profilePhone1Textbox.clear();
//Send the string value to the profile PHONE1 text box
profilePhone1Textbox.sendKeys(profilePhone1Value);
//Declare a string variable for PHONE2 and assign it's value
String profilePhone2Value = data.get(3).get("FieldValue");
//Find the profile PHONE2 text box
WebElement profilePhone2Textbox = driver.findElement(By.id("phone2"));
//Clear the value from the profile PHONE2 text box
profilePhone2Textbox.clear();
//Send the string value to the profile PHONE2 text box
profilePhone2Textbox.sendKeys(profilePhone2Value);
//Declare a string variable for SMS Phone and assign it's value
String profileSMSValue = data.get(4).get("FieldValue");
//Find the profile sms phone text box
WebElement profileSMSTextbox = driver.findElement(By.id("sms_phone"));
//Clear the value from the profile sms phone text box
profileSMSTextbox.clear();
//Send the string value to the profile sms phone text box
profileSMSTextbox.sendKeys(profileSMSValue);
//Declare a string variable for Fax Number and assign it's value
String profileFaxValue = data.get(5).get("FieldValue");
//Find the profile fax text box
WebElement profileFaxTextbox = driver.findElement(By.id("fax"));
//Clear the value from the profile fax text box
profileFaxTextbox.clear();
//Send the string value to the profile fax text box
profileFaxTextbox.sendKeys(profileFaxValue);
//Declare a string variable for Location and assign it's value
String profileLocationValue = data.get(6).get("FieldValue");
//Find the profile Location text box
WebElement profileLocationTextbox = driver.findElement(By.id("location"));
//Clear the value from the profile Location text box
profileLocationTextbox.clear();
//Send the string value to the profile Location text box
profileLocationTextbox.sendKeys(profileLocationValue);
}
上面的代码可以工作,但是肯定有更有效的方法来编写java类吗?
我希望能够找到一种方法,使用数据表中的不同值来迭代 WebElement 变量。有办法做到这一点吗?
我找到了两个代码示例,我将尝试并调整它们,但不太确定如何将它们组合在一起..
第一个例子:
for (Map.Entry<String, String> entry : countries.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
第二个例子:
List<Map<String, Object>> list; // this is what you have already
for (Map<String, Object> map : list) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
}
}
注意:我是 java/编码新手,对代码的任何批评都会有所帮助..
@homaxto,根据指示,我创建了以下 bean 类 Person..
public class Person implements java.io.Serializable {
// Properties
private String Username;
private String Name;
private String Email;
private String Phone1;
private String Phone2;
private String SMS;
private String Fax;
private String Location;
private String Address;
private String Zip;
private String PayPal;
// Getters
public String getUsername() { return Username; }
public String getName() { return Name; }
public String getEmail() { return Email; }
public String getPhone1() { return Phone1; }
public String getPhone2() { return Phone2; }
public String getSMS() { return SMS; }
public String getFax() { return Fax; }
public String getLocation() {return Location; }
public String getAddress() { return Address; }
public String getZip() { return Zip; }
public String getPaypalEmail() { return PayPal; }
// Setters
public void setUsername() { this.Username = Username; }
public void setName() { this.Name = Name; }
public void setEmail() { this.Email = Email; }
public void setPhone1() { this.Phone1 = Phone1; }
public void setPhone2() { this.Phone2 = Phone2; }
public void setSMS() { this.SMS = SMS; }
public void setFax() { this.Fax = Fax; }
public void setLocation() {this.Location = Location; }
public void setAddress() { this.Address = Address; }
public void setZip() { this.Zip = Zip; }
public void setPaypalEmail() { this.PayPal = PayPal; }
}
我的数据表如下:
Feature: Update my personal details
As a Property Manager
I want to update my personal details
So that I can be reached by my customers
@wip
Scenario: Update my personal details
Given I am logged in to my account
Given I have navigated to the change profile tab
When I populate a field with a new value
| Username | Name | Email | Phone1 | Phone2 | SMS | Fax | Location | Address | Zip | PayPal |
| testy | Test Logger | testerslog1@gmail.com | 04 555 6666 | 0800 123 4567 | 029 295 495 | 04 888 9999 | Bermuda Triangle | 5 Pokemon Lane | 9999 | testersLog1@gmail.com |
Then I click save
最佳答案
我会做如下的事情。为此,您必须使用输入元素的 ID 作为第一列中的值。如果您的数据表中必须有较少的依赖项,您可以在步骤实现中映射它并在使用它之前查找它。另外,您不需要标题行,并且只需要跳过第一行即可。
@When("^I populate a field with a new value$")
public void ShouldPopulateFieldsWithValues(DataTable dataTable) throws Throwable {
List<List<String>> rows = dataTable.asLists(String.class);
// Either quit having a header in your datatable or remove the first row
rows.remove(0);
for (List<String> row : rows) {
String fieldName = row.get(0);
String fieldValue = row.get(1);
// Use the IDs as name in your datatable
WebElement profileNameTextbox = webdriver.findElement(By.id(fieldName));
profileNameTextbox.clear();
profileNameTextbox.sendKeys(fieldValue);
}
}
解决此问题的另一种方法可能是翻转将字段名作为列名的表。
When I populate a field with a new value
| Name | Email address | Phone 1 | Phone 2 | SMS Phone | Fax number | Location |
| Joe Blogs | jblogs@gmail.com | 04 555 6666 | 0800 123 4567 | 023 222 333 | 09 888 9999 | Bermuda Triangle |
通过此设计,您可以创建一个 bean 类“Person”,其中每列都有 getter 和 setter。 Cucumber 将执行 camel-casing 并自动调用名为 setEmailAddress() 等的方法。因此,如果标题列名为“电子邮件地址”,那么 Cucumber 将调用名为 setEmailAddress
的方法,其值为 jblogs@gmail.com
。
这将为您提供以下实现签名
@When("^I populate a field with a new value$")
public void iPopulateAFieldWithANewValue(List<Person> persons) throws Throwable {
for (Person p : persons) {
...
}
}
正如您所见,这很容易允许多行数据。哪一个最适合您的情况完全取决于您,我只是想展示您拥有的另一种选项,该选项没有详细记录。
关于java - List<Map<String,String>> 迭代 WebElement 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35908185/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to nest OR statements in JavaScript? 有没有办法做到这一点:
在 JavaScript 中有没有办法让一个变量总是等于一个变量?喜欢var1 = var2但是当var2更新,也是var1 . 例子 var var1 = document.getElementBy
我正在努力理解这代表什么 var1 = var2 == var3 我的猜测是这等同于: if (var2 == var3): var1 = var2 最佳答案 赋值 var1 = var2
这个问题已经有答案了: What does the PHP error message "Notice: Use of undefined constant" mean? (2 个回答) 已关闭 8
我在临时表中有几条记录,我想从每条记录中获取一个值并将其添加到一个变量中,例如 color | caption -------------------------------- re
如何将字符串转为变量(字符串变量--> $variable)? 或者用逗号分隔的变量列表然后转换为实际变量。 我有 2 个文件: 列名文件 行文件 我需要根据字符串匹配行文件中的整行,并根据列名文件命
我有一个我无法解决的基本 php 问题,我也想了解为什么! $upperValueCB = 10; $passNodeMatrixSource = 'CB'; $topValue= '$uppe
这可能吗? php $variable = $variable1 || $variable2? 如果 $variable1 为空则使用 $variable2 是否存在类似的东西? 最佳答案 PHP 5
在 Perl 5.20 中,for 循环似乎能够修改模块作用域的变量,但不能修改父作用域中的词法变量。 #!/usr/bin/env perl use strict; use warnings; ou
为什么这不起作用: var variable; variable = variable.concat(variable2); $('#lunk').append(variable) 我无法弄清楚这一点
根据我的理解,在32位机器上,指针的sizeof是32位(4字节),而在64位机器上,它是8字节。无论它们指向什么数据类型,它们都有固定的大小。我的计算机在 64 位上运行,但是当我打印包含 * 的大
例如: int a = 10; a += 1.5; 这运行得很完美,但是 a = a+1.5; 此作业表示类型不匹配:无法从 double 转换为 int。所以我的问题是:+= 运算符 和= 运算符
您好,我写了这个 MySQL 存储过程,但我一直收到这个语法错误 #1064 - You have an error in your SQL syntax; check the manual that
我试图在我的场景中显示特定的奖牌,这取决于你的高分是基于关卡的目标。 // Get Medal Colour if levelHighscore goalScore { sc
我必须维护相当古老的 Visual C++ 源代码的大型代码库。我发现代码如下: bIsOk = !!m_ptr->isOpen(some Parameters) bIsOk的数据类型是bool,is
我有一个从 MySQL 数据库中提取的动态产品列表。在 list 上有一个立即联系 按钮,我正在使用一个 jquery Modal 脚本,它会弹出一个表单。 我的问题是尝试将产品信息变量传递给该弹出窗
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
jQuery Core Style Guidelines建议两种不同的方法来检查变量是否已定义。 全局变量:typeof variable === "undefined" 局部变量:variable
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: “Variable” Variables in Javascript? 我想肯定有一种方法可以在 JavaScrip
在语句中使用多重赋值有什么优点或缺点吗?在简单的例子中 var1 = var2 = true; 赋值是从右到左的(我相信 C# 中的所有赋值都是如此,而且可能是 Java,尽管我没有检查后者)。但是,
我是一名优秀的程序员,十分优秀!