我们正在使用Ruby
和Cucumber
进行自动化。我们有大约80个特征文件,1个包含所有通用步骤的web_Steps文件。
我们面临的问题是特征文件中存在所有定位器。因此,如果html结构发生变化,那么我们必须更新所有相应文件中的定位器,这非常耗时。例如:
网页步骤:
And /^I fill in "([^"]*)" with "([^"]*)"$/ do |field, value|
fill_in(field, with: value)
end
功能文件:
And I fill in "location" with "Mumbai"
And I fill in "contact_details" with "xxx@gmail.com"
所以如果定位器"位置"更改为其他内容然后我们必须更新包含定位器的所有功能文件" location"
有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
基本上"你正在纠错它" - 您所拥有的测试类型正是几年前从黄瓜中删除web_steps.rb的原因。下面的文章讨论了在使用黄瓜时应该如何编写测试 - http://aslakhellesoy.com/post/11055981222/the-training-wheels-came-off
答案 1 :(得分:0)
我在spec_helper.rb
添加一个全局变量
$locator = 'location'
如果HTML发生变化,您只需在spec_helper
中更改一次,定位器就会在所有功能文件中发生变化。
答案 2 :(得分:0)
关于这个主题已经有很多很棒的文章了,但我真的很喜欢这个push HOW down。总结一下:
- 赞成陈述性BDD
- 重构介绍DSL
- 将所有UI敏感细节(例如选择器)移动到代码中的单一事实来源
Loadable component,Page object和Object map等模式可以帮助您完成所有这些。
答案 3 :(得分:0)
This is our exisitng structure
This is something i am thinking of, by creating multiple web_steps
我知道页面对象模型是我应该遵循的,但需要花费大量时间。 使用全局变量的另一个想法,我从未做过,但截至目前,这看起来是可行的。