我有一个功能文件和相应的步骤defs,并且都按预期工作。现在,在相同的项目结构中,我创建了第二个功能文件。甚至在为新文件创建步骤defs之前,黄瓜告诉我,新文件中的一个步骤存在匹配步骤def,当然,原因是该步骤的措辞与第一个功能中的步骤相同因此,黄瓜拒绝为该步骤自动生成步骤def,前提是已经存在实现。这两个步骤共享相同的正则表达式(捕获组),但正则表达式表示不同的URL参数
我现在的问题是如何重用现有的步骤def。我读到可以使用java switch语句,因此步骤def可用于表示两个功能步骤,但作者没有详细说明如何实现这一点。
功能文件1:
Scenario: Open shipping page
When I select a course
And I navigate to the shipping app
Then the "shipping page" should open
步骤定义:
@Then("^the \"([^\"]*)\" should open$") . //matching step def
public void verifyShippingPage(String shippingPage) {
shipping.verifyShippingPage(shippingPage); //method call
}
功能文件2:
Scenario: Open planet page
When I select a course
And I navigate to the planet app
Then the "planet page" should open //step that wants to reuse the step def above
发货页面和行星页面具有不同的URL,但共享相同的正则表达式\"([^\"]*)\"
。可以使用switch语句来更改URL之间,还是有任何方法可以实现此任务?
答案 0 :(得分:1)
是的,您可以使用switch语句。 ,例如:
@Then("^the \"([^\"]*)\" should open$")
public void verifyOnExpectedPage(String expectedPage) {
switch (expectedPage) {
case "shipping page":
verifyShippingPage();
break;
case "otherpage":
verifyOtherPage();
break;
}
我会推荐两件事:
1.当此步骤与switch语句中未定义的页面一起使用时,使用默认值
2.为了使哪些选项可用更明显,请使用此(shipping page|other page)
之类的捕获组而不是正则表达式。
在这种情况下,它只匹配作为捕获组一部分的页面,当您使用尚未定义的页面时,在您的要素文件中进行可视化。
所以它更像是这样:
@Then("^the (shipping page|other page) should open$")
public void verifyOnExpectedPage(String expectedPage) {
switch (expectedPage) {
case "shipping page":
verifyShippingPage();
break;
case "otherpage":
verifyOtherPage();
break;
default:
System.out.println("Unexpected page type");
}
最后,另一种选择是每页声明单独的步骤定义,如下所示:
@Then("^the shipping page should open$")
public void verifyShippingPage() {
verifyShippingPage();
}
@Then("^the other page should open$")
public void verifyOtherPage() {
verifyOtherPage();
}