在页面对象gem中的populate_page_with中使用多个数据集

时间:2014-01-21 05:46:01

标签: ruby cucumber page-object-gem

我有一个表单,我使用page-object gem填充populate_page_with data_for。它是这样定义的:

def add_fruit(data = {})
  populate_page_with data_for(:new_fruit, data)
  add_fruit_submit
end

然后我按照这样的方式调用方法:

on(AddFruitPage).add_fruit

我的yml文件如下所示:

new_fruit:
  color: red
  size: large
  type: apple
  price: 0.75
  ...
another_fruit
  color: orange
  size: medium
  type: orange
  price: 0.99
  ...

我知道我可以通过在我的步骤中执行以下操作来覆盖每个字段:

When(^/I add a banana$/) do
  on(AddFruitPage).add_fruit('color' => 'yellow', 'size' => 'small', 'type' => 'banana')
end

由于另一个水果的数据已经存在于yml文件中,我可以使用参数告诉方法要加载哪些数据,而不是在使用方法时必须指定每个值吗?类似的东西:

def add_fruit(data = {})
  if(data['type'] == 'another')
    populate_page_with data_for(:new_fruit, data)
  else
    populate_page_with data_for(:another_fruit, data)
  end
end

这样称呼它?

on(AddFruitPage).add_fruit('type' => 'another')

Type是一个可选参数,仅用于加载另一组数据。颜色,大小,类型和价格都映射到页面中在类中定义的文本字段。可以这样做吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是Ruby 2,则可以使用命名参数 - 为fruit类型创建命名参数,将其余参数创建为数据数组的一部分。

我可能会使用一个指定data_for的第一个参数的参数,而不是使用已存在于数据中的“类型”。方法定义只是:

def add_fruit(fruit_type: :new_fruit, **data)
  populate_page_with data_for(fruit_type, data)
  add_fruit_submit
end

可以通过多种方式调用:

add_fruit()  # Specify nothing
add_fruit(:color => 'red')  # Just specify the data
add_fruit(:fruit_type => :another_fruit)  # Just specify the fruit type
add_fruit(:fruit_type => :another_fruit, :color => 'red')  # Specify fruit type and data

如果您使用的是Ruby 2之前的版本,则可以执行以下操作:

def add_fruit(data = {})
  fruit_type = data.delete(:fruit_type) || :new_fruit
  populate_page_with data_for(fruit_type, data)
  add_fruit_submit
end