如何使用带有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"是一个变量,取决于单选按钮或下拉列表。 如何用条件实现黄瓜特征文件和步骤定义类方法?
答案 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 invoice
和When 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