【问题标题】:Ruby Cucumber Automation红宝石黄瓜自动化
【发布时间】:2017-03-22 23:31:40
【问题描述】:

我们正在使用 RubyCucumber 进行自动化。我们有大约 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"

因此,如果定位器“位置”更改为其他内容,那么我们必须更新所有包含定位器“位置”的功能文件

有没有更好的方法来解决这个问题?

【问题讨论】:

  • 我不知道我是否真的理解你的问题。但是,如果我这样做:你不能创建一个全局变量 $locator = 'location' 吗?所以你只需要改变它,它就会在所有的功能文件中改变。
  • 此外,如果您有许多这些可变变量,请创建一个全局哈希并在其中存储带有合适键的定位器。
  • 你在使用页面对象吗?如果没有,你应该这样做。

标签: selenium-webdriver automation cucumber capybara bdd


【解决方案1】:

基本上“你搞错了” - 你所进行的测试类型正是几年前从黄瓜中删除 web_steps.rb 的原因。以下文章介绍了在使用 cucumber 时应如何编写测试 - http://aslakhellesoy.com/post/11055981222/the-training-wheels-came-off

【讨论】:

    【解决方案2】:

    我会在你的spec_helper.rb 中添加一个全局变量

    $locator = 'location'
    

    如果 HTML 发生更改,您只需在 spec_helper 中轻松更改一次,定位器将在您的所有功能文件中更改。

    【讨论】:

    • 我无法理解我的 websteps 将如何理解要选择的全局变量。您能否为此提供一些参考网站。
    【解决方案3】:

    关于这个话题已经有很多很棒的文章了,但我真的很喜欢这个push HOW down。总结一下:

    • 支持声明式 BDD
    • 重构引入 DSL
    • 将所有 UI 敏感细节(例如选择器)移至代码中的单一事实来源

    Loadable componentPage objectObject map 等模式将帮助您解决所有这些问题。

    【讨论】:

      【解决方案4】:

      This is our exisitng structure

      This is something i am thinking of, by creating multiple web_steps

      我知道页面对象模型是我应该遵循的,但这需要大量时间。 另一个使用全局变量的想法,我从来没有这样做过,但到目前为止这看起来是可行的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多