在黄瓜特征情景中应用条件

时间:2017-07-17 09:14:44

标签: selenium cucumber qa

如何使用带有selenium的Cucumber java来处理以下类型的场景:

  Scenario: Raise Invoice by User according to Raise Invoice Type.
  When I select the Raise Invoice Type as "RaiseInvoiceType"
  IF RaiseInvoiceType == 'ABC'
     Method ABC()
  else if RaiseInvoiceType == 'XYZ'
     Method XYZ()

" RaiseInvoiceType"是一个变量,取决于单选按钮或下拉列表。 如何用条件实现黄瓜特征文件和步骤定义类方法?

2 个答案:

答案 0 :(得分:3)

<强>背景

黄瓜功能文件都是关于弥合业务和开发团队之间的会话差距,因此,代码和条件语句不应该出现在它们内部。

解决方案

问题的解决方法是如何编写步骤定义。

以Cucumber的Ruby实现为例:

When('I select the Raise Invoice Type as "$invoice_type"') do | invoice_type |
  if invoice_type == 'ABC'
     method_abc
  else 
     if invoice_type == 'XYZ'
        method_xyz
     else
        raise 'Unknown invoice type'
     end
  end
end

这会将代码和条件语句从功能文件中删除,这实际上意味着应用程序/系统的行为的实时文档

进一步改进

但我也会改变步骤的措辞:

Scenario Outline: Raise Invoice by User according to Raise Invoice Type.
  When I raise the invoice type "<invoice_type>"
  Then some expected behaviour

Examples:
  | invoice_type |
  | ABC          |
  | XYZ          |

这使得步骤远离实现(例如可以是下拉列表,无线电或文本框),更多的是系统的行为 - 这个场景突出的特点是你应该能够提高发票,而不是您应该在选择框中有一个可供选择的选项列表。

答案 1 :(得分:0)

这里重要的是两种发票类型之间的区别。每种类型对您的业务都很重要,因此我会为每种类型创建一个步骤,例如

When I raise an ABC invoiceWhen I raise an XYZ invoice

在实现步骤定义时,我可能会考虑使用相同的辅助方法来减少代码,例如:

When I raise an ABC invoice' do
  raise_invoice type: 'abc'
end

When I raise an XYZ invoice' do
  raise_invoice type: 'xyz'
end

然后有一个帮助方法处理您如何提高发票。

def raise_invoice(type: )
  click_radio('invoice', type)
end

这为您提供了非常简单的步骤定义,步骤定义中没有条件或其他复杂功能,以及在浏览器中处理交互的简单方法。

注意上面的所有代码都是伪代码/ ruby​​