首页 > 解决方案 > 带有不同按钮的黄瓜场景大纲

问题描述

我想创建一个场景大纲,在每次运行时单击不同的按钮。我想这样做的原因是因为按钮产生相同的预期结果,所以我不能编写多个场景。

我想不出一个逻辑来处理这个问题。下面,请看我的代码。

// --- feature file ---
Scenario Outline: click any button other than button1 and display label1
    When i click "<buttontype>"
    Then i am presented with label1
      Examples:
        | buttontype        |
        | button2           |
        | button3           |
        | button4           |

// --- Page Object ---
public class ButtonsObjects {

    public ButtonsObjects(AppiumDriver driver) {
        PageFactory.initElements(new AppiumFieldDecorator(driver), this);
    }
    // ------------------ locators ------------------

    @AndroidFindBy(id = "btn1")
    public MobileElement button1;

    @AndroidFindBy(id = "btn2")
    public MobileElement button2;

    @AndroidFindBy(id = "btn3")
    public MobileElement button3;

    @AndroidFindBy(id = "btn4")
    public MobileElement button4;

    // ------------------ actions ------------------
    public void clickButton1() {
      button1.click;
    }

    public void clickButton2() {
      button2.click;
    }

    public void clickButton3() {
      button3.click;
    }

    public void clickButton4() {
      button4.click;
    }

}

// --- step definition ---
@When("^i click \"([^\"]*)\"$")
    public void i_click(String arg0) {
        // How do I handle this here?
    }

那么如何参数化这些按钮并单击它们呢?可能吗?

提前致谢。

标签: javaseleniumautomationcucumbergherkin

解决方案


使用将按钮名称作为输入并单击相应按钮的方法来丰富您的 PageObject 怎么样?

public void clickOnButton(String buttonName) {
  // Implement as you wish (if/switch/reflection...)
}

然后在你的 Cucumber 步骤中,你可以依赖这个方法:

@When("i click {string}")
public void i_click(String buttonName) {
  pageObject.clickOnButton(buttonName);
}

注意:我将Cucumber Expressions用于更容易的步骤注释(自 Cucumber 5.x 起可用)


推荐阅读