Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cucumber 如何实施两个相似的步骤_Cucumber_Gherkin - Fatal编程技术网

Cucumber 如何实施两个相似的步骤

Cucumber 如何实施两个相似的步骤,cucumber,gherkin,Cucumber,Gherkin,有没有办法在一个函数中实现两个步骤(见下文): When I click on the "Button_name" button When I click on the "Link_name" name 有没有语法让cucumber不关心字符串后面会出现什么,在这两个步骤中,我不需要生成两个不同的函数 通常情况下,我会使用如下方式分别实现它们: @当(“^I查看\”([^\“]*)\”按钮$”时 publicsvoidsmt(stringsmt){}是的,您可以用一个方法实现一个步骤,并将单击

有没有办法在一个函数中实现两个步骤(见下文):

When I click on the "Button_name" button
When I click on the "Link_name" name
有没有语法让cucumber不关心字符串后面会出现什么,在这两个步骤中,我不需要生成两个不同的函数

通常情况下,我会使用如下方式分别实现它们:

@当(“^I查看\”([^\“]*)\”按钮$”时
publicsvoidsmt(stringsmt){}

是的,您可以用一个方法实现一个步骤,并将单击的内容作为参数传递给该方法。 但是,这会使测试代码更加复杂。因此,请考虑“<强>应该< /强>”。在测试代码中有复杂的逻辑,会使测试变得更难理解和维护,从而挫败了他们的目的。 如果希望重用公共功能,建议编写可以从步骤定义调用的帮助器方法

例如:

@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()分别单击按钮或链接。(在本例中,我使用了不同的clickButton()和clickLink()方法,因为它们将使用不同类型的元素。)

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


或者,您可以实现页面对象,在那里为页面对象添加所有相关选择器,并调用相关页面对象上单击特定链接/按钮的方法,将与UI交互的逻辑委托给页面对象,并从步骤定义中调用此逻辑。

点击按钮和其他点击链接,最好的做法是有两个不同的步骤

使用BDD的一个坏习惯是考虑在步骤中重用代码

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


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

@当“^I查看\”([^\“]*)\”([^\“]*)\“$”)并忽略第二个参数时?这是一个建议的解决方案:)我删除了注释(抱歉):我以为你说我没有在“([^\“]*)”之后编写文本按钮,并不是说你告诉我一个解决它的指南没有问题:)但是希望它有意义,这样你就有了一个空格和第二个regexp来捕获任何剩余的内容。每个步骤的实现是什么?如果您需要特定于“名称”或“按钮”的代码,那么重用步骤定义将一无所获。