我将如何使用Cucumber Java和Selenium来处理以下场景:
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“是一个变量,它依赖于单选按钮或下拉菜单。如何在条件下实现黄瓜特征文件和步骤定义类方法?
发布于 2017-07-17 11:02:08
背景
黄瓜特性文件都是为了弥合业务和开发团队之间的会话鸿沟,因此,代码和条件语句不应该出现在它们的内部。
解决方案
解决问题的方法是如何编写步骤定义。
以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 |这将从实现(例如,下拉列表、广播框或文本框)中移开一步,更接近于系统的现有行为--此场景突出显示的特性是,您应该能够提出发票,而不是在选中框中列出可供选择的选项列表。
发布于 2017-07-17 19:50:24
重要的是这两种发票类型的区别。每种类型对您的业务都很重要,所以我会为每种类型创建一个步骤。
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。
https://stackoverflow.com/questions/45140226
复制相似问题