如何实现相似的两个步骤

How to implement two steps who are similar

有什么方法可以在单个函数中实现这样的两个步骤(见下文):

When I click on the "Button_name" button
When I click on the "Link_name" name

有没有什么语法可以让黄瓜不关心字符串后面的内容,并且在这两个步骤中我不需要创建两个不同的函数?

通常我会像这样单独实现它们:

@When("^我看着\"([^\"]*)\"按钮$") public 无效 smt(字符串 smt){ }

是的,您可以用一种方法实现一个步骤,然后将单击的内容作为参数传递给该方法。 但是,这会使您的测试代码更加复杂。所以请考虑你是否应该。在你的测试代码中有复杂的逻辑,会让你的测试更难理解和维护,从而打败他们的目的恕我直言。

如果您想重用常用功能,建议编写可从步骤定义中调用的辅助方法。

例如:

@When ("I click on the {string} button")
public void clickButton(String button) {
  clickButton(button);
}

@When ("I click on the "Link_name" name")
public void clickLink(String link) {
  clickLink(link);
}

并实现 clickButton() 和 clickLink() 以分别单击按钮或 link。 (我在这个例子中使用了不同的 clickButton() 和 clickLink() 方法,因为 iirc 这些方法会使用不同类型的元素。)

如果需要(或者您真的想使用开关),您可以使用开关语句根据按钮或 link 名称使用正确的选择器。

或者,您可以实现页面对象,在其中添加页面对象的所有相关选择器,并在单击该特定 link/button 的相关页面对象上调用方法,委托逻辑与 UI 到页面对象并从您的步骤定义中调用此逻辑。

如果一个点击按钮和另一个点击按钮的上下文不同 link,最佳做法是有两个不同的步骤。

使用 BDD 的一个不好的做法是考虑在步骤中重用代码。

当一个步骤中有很多逻辑时,任何修改都会影响许多测试。

应该关注页面对象中的代码重用。