我正在寻找一种方法来获取在我的要素文件中为每个方案输入实际方案 之前在每个步骤 中传递的所有参数
示例要素文件:
Feature: Login action
Background:
When "{login url}" is open
Scenario: Registered user provides valid username and password
Given user enters username "{username}" and password "test password"
And user clicks on "btnLogin"
Then user is logged in
我想要的参数:
到目前为止我尝试了什么:
我尝试过使用一个会被我的所有场景自动使用的公共钩子:
public class ScenarioHook {
public ScenarioHook() {
}
@Before
public void setupScenario(Scenario scenario) throws InterruptedException {
//Here I am currently watching the {scenario} object and I can see all the steps
//but I still dont know where to get the passed parameter values.
}
@After
public void teardownScenario() throws InterruptedException {
}
}
更新1: 我想这样做的原因是我想操纵字符串(如果可能的话)。例如所有数据都包含在" {}"在进入实际场景之前,它将转换为其他内容。
答案 0 :(得分:5)
您可以使用@Transform
注释将参数值更改为步骤定义。
为此,您需要创建一个包含字符串修改逻辑的类,并返回修改后的值。
public class StringTransformer extends Transformer<String>{
public String transform(String value) {
return "transformed "+value;
}
}
接下来,您需要使用方法参数前面的@Transform注释在stepdefinition中包含此类。
@When("^Login with (.*?)$")
public void helloHere(@Transform(StringTransformer.class) String userName)
{
System.out.println("TEXT --- " + userName);
}
这应该为您提供新的转换字符串。您可以使用它从初始字符串创建对象。 (实际上就是它的用途)
答案 1 :(得分:0)
黄瓜Sceanario
类不会为您提供此信息,因为我认为在开始执行方案之前实际上正在加载和解析所有步骤,但在方案执行期间逐个解析。我能想到的一个选项是创建一个后台步骤,您将手动包含场景中涉及的所有参数。例如:
Feature: Login action
Background:
Given these parameters are using within this scenario: "{login url}", "{username}", "password", "btnLogin"
When "{login url}" is open