具有相同按钮的黄瓜场景?

Cucumber scenario with same buttons?

这是我第一次做黄瓜,所以我问的可能没有错,但似乎有更好的方法:

所以现在我正在浏览一个类似调查的网站,这是我使用黄瓜的第一个自动化任务。它工作得很好,但像大多数调查一样,他们的很多 "Fill then out, then click Next"

所以在我的功能文件中我有很多:

    Then I will click 'Next'

与步骤匹配(因为按钮都有相同的文本):

Then(/^I will click 'Next'$/) do
  click_button('Next')
end

所以这个一步定义在我的特征文件中定义了 8-9 行......我想这没问题,但我的特征文件看起来......丑陋?我完全不习惯 Gherkin 语言,因为这是我第一次使用,但它基本上变成了很多:

THEN SELECT THAT THING FROM DROPDOWN
THEN CLICK THIS RADIO BUTTON
THEN SELECT THIS BUTTON
THEN CLICK NEXT

一遍又一遍……我的意思是它是人类可读的,但它看起来很乱?这是正确的吗?

我也不确定什么时候应该在我的功能文件中使用 "explicits"?我应该明确地说我要从下拉列表中 select 'X'(或 "X",不确定是否重要)吗?或者单击 'Next' 按钮或 select 例如 'yes' 单选按钮?

是的,我认为您想将参数发送到步骤定义

Then I will click 'Next'

步骤定义将是

Then(/^I will click "([^"]*))*"$/) do |text|
  click_button(text)
end

以上内容也适用于

Then I will click 'OK'

您正在编写所谓的命令式步骤,这确实是错误的 cucumber/gherkin。

您的步骤应该说 "WHAT" 您正在做而不是 "HOW" 您正在做。

不知道你的表单细节,我们来凑个流程吧。 第一页名称 第 2 页。人口统计 Page 3. 最喜欢的球队 Page 4. 最喜欢的篮球队 第 5 页。显示他们的团队在其他调查对象中的受欢迎程度的结果页面

Given I enter the "Are you a Bandwagon Fan Survey"
When I enter my name
And I enter my demographics
And I choose a favorite football team
And I choose a favorite basketball team
Then I should be directed to the result page
And I should see my teams ranked on a graph

输入您的姓名和单击下一步的详细信息应该隐藏在该 stepdef 中。试图测试您的应用程序的人不关心名称是什么,或者字段 ID 是什么或类似的东西。他们只是想知道工作流程。

如果您正在执行使名称页面出错的场景,您只需修改您的小黄瓜以说出类似的内容。

When I enter a name too long
Then I see a name too long error message

When I do not enter a name
Then I see a name missing error message

同样,除非它对测试场景至关重要,否则您将太长的细节或错误消息留给步骤定义(或以下)。我通常设置工厂女孩来处理我的数据,只使用场景的文本来拉取当前数据。所以我会有一个错误消息工厂,其中有一个 "name_missing" 和一个提供正确值的 "name_too_long" 子工厂。如果我需要改变或查找某些东西,一切都在同一个地方......但最重要的是它不会弄乱我的小黄瓜。