【问题标题】:Cucumber scenario with same buttons?具有相同按钮的黄瓜场景?
【发布时间】:2015-10-06 01:14:48
【问题描述】:

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

所以现在我正在浏览一个类似调查的网站,作为我的第一个黄瓜自动化任务。它工作得很好,但像大多数调查一样,他们有很多“然后填写,然后点击下一步”

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

    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

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

我也不确定什么时候应该在我的功能文件中使用“显式”?就像我应该明确地说我要从下拉列表中选择“X”(或“X”,不确定是否重要)?或单击“下一步”按钮或选择“是”单选按钮?

【问题讨论】:

    标签: cucumber


    【解决方案1】:

    您正在编写所谓的命令式步骤,这确实是处理黄瓜/小黄瓜的错误方式。

    你的步骤应该是“你在做什么”而不是“你在做什么”。

    不知道表单的详细信息,让我们组成一个流程。 第 1 页。名称 第 2 页。人口统计 第 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
    

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

    【讨论】:

    • 我觉得我做错了哈哈。但是,嘿第一次....但这是极好的信息!谢谢你。就黄瓜而言,AND和THEN之间有什么区别?我假设它们都是“关键字”?
    • 我也猜我应该避免使用特定标识符 IE:“然后我从下拉列表中选择“选项 A”,我应该说:然后我从选择选项下拉列表中选择一个选项?也不是说你错了,但是为什么写cucumber Imperatively不好?看起来更描述性?这不是好事吗...?
    • "And" 只是说我正在继续我的 Given/When/Then。它本身没有真正的意义。给定通常是测试设置/准备,何时测试操作,然后是操作的预期结果。技术问题:在红宝石黄瓜中,Given/When/Then 实际上被忽略了。它们都是 Cucumber::RbSupport::RbDSL#register_rb_step_definition 的别名,cucumber 忽略匹配正则表达式中的关键字。它们只是为了帮助您表达该步骤的意图。
    • 太棒了,我以更具声明性的方式重新制作了测试,它看起来确实更好(隐藏了多次单击“下一步”的多个实例,不需要看到 IMO)。确实看起来好多了(并且功能文件短了一点)
    【解决方案2】:

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

    Then I will click 'Next'
    

    步骤定义将是

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

    以上也适用于

    Then I will click 'OK'
    

    【讨论】:

    • 对,但我说很多按钮说“下一步”以继续到下一个屏幕,所以我想知道继续说“然后单击“下一步”是否有意义,或者我应该更具描述性
    • 不,您不必描述性,只需使用文本即可
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多