我有一个功能文件和相应的步骤defs,两者均按预期工作。现在,在相同的项目结构中,我创建了另一个功能文件。甚至在为新文件创建步骤def之前,黄瓜就告诉我新文件中某个步骤存在匹配的步骤def,当然,原因是该步骤的措辞与第一个功能部件中的步骤相同,因此,黄瓜在已经存在实现的前提下,拒绝为该步骤自动生成步骤def。这两个步骤共享相同的正则表达式(捕获组),但是正则表达式表示不同的URL参数
我现在的问题是如何重用现有的步骤def。我读到有可能使用java switch语句,以便可以使用step def来表示两个功能步骤,但是作者并未详细说明如何实现。
功能文件1:
Scenario: Open shipping page
When I select a course
And I navigate to the shipping app
Then the "shipping page" should open
步骤Def:
@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之间进行更改,或者有什么方法可以完成此任务? 最佳答案
是的,您可以使用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();
}
关于java - 如何在 cucumber 步骤定义中使用Java Switch语句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49359790/