java匹配字符串到变量名称并传递变量的值

时间:2016-03-18 16:55:39

标签: java regex selenium-webdriver cucumber

我是使用Java的Cucumber Selenium的初学者并且已经谷歌了,但无法找到它是否可能。这是问题所在。我有一个方法,它有一个我想与变量名匹配的String参数。然后我想将该变量用于另一种方法。

所以简而言之,我会有一个参数String(f.e。" name") 并希望与变量' name'匹配获取/使用该值

像这样。

我的黄瓜情景会有这样一个步骤:

Abstract Scenario: check errors in fields
If there is an error in "field"
Then foo

Examples:
|field  |
|name   |
|address|
|phone  |

步骤定义中的方法类似于:

private final name = "field_ID_Name"
private final address = "field_ID_Address"
private final phone = "field_ID_Phone"

public void thereIsAnErrorIn(String field){
// Here the match from the argument "name" to use of the variable "name"
checkError(field)
}

private void checkError(String field){
// here I'd like to check based on the value, so in my case for variable
//'name' would get "field_ID_name" as passed parameter
seleniumdriver.pollVisible(field) //field = "field_ID_Name"
}

现在(显然)传递了#34;名称"作为字符串,但我无法找到传递方式" field_ID_Name"对于这个例子。 我可以使用switch语句来检查各种可能的字段值,但我宁可根据传递的字符串进行匹配。将精确定位器作为第一种方法的参数的另一种选择,但对于必须理解特征文件的客户而言,这并不容易阅读(黄瓜情景' s)。

任何建议都赞赏!

2 个答案:

答案 0 :(得分:1)

您可以创建一个带有变量名称作为键的映射,并将所需的参数作为值传递给pollVisible函数。 所以你的地图看起来像是:

myMap:name - > field_ID_Name

现在做:

private void checkError(String field){

seleniumdriver.pollVisible(myMap.get(场));

}

答案 1 :(得分:0)

您可以使用Java Reflection API读取对象字段值,这是最简单的方法 - 只需使用Apache BeanUtils库。看看这个回答相似的问题:

Retrieve field values using BeanUtils