我有一个功能文件和相应的步骤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/

10-16 02:21