如何在黄瓜步骤定义中使用java switch语句?

时间:2018-03-19 09:40:13

标签: java cucumber

我有一个功能文件和相应的步骤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之间,还是有任何方法可以实现此任务?

1 个答案:

答案 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();
}