Ruby 在页面中使用多个数据集用页面内对象填充页面

Ruby 在页面中使用多个数据集用页面内对象填充页面,ruby,cucumber,page-object-gem,Ruby,Cucumber,Page Object Gem,我有一个表单,我用数据填充页面,以使用页面对象gem。其定义如下: def add_fruit(data = {}) populate_page_with data_for(:new_fruit, data) add_fruit_submit end on(AddFruitPage).add_fruit 然后我在我的步骤中以以下方式调用该方法: def add_fruit(data = {}) populate_page_with data_for(:new_fruit, dat

我有一个表单,我用数据填充页面,以使用页面对象gem。其定义如下:

def add_fruit(data = {})
  populate_page_with data_for(:new_fruit, data)
  add_fruit_submit
end
on(AddFruitPage).add_fruit
然后我在我的步骤中以以下方式调用该方法:

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')

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

如果您使用的是Ruby 2,那么可以使用命名参数—为水果类型创建命名参数,其余的作为数据数组的一部分

我可能会使用一个参数来指定的
data\u的第一个参数,而不是使用数据中已经存在的“type”。方法定义简单地说就是:

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

我使用的是ruby 1.9.3。我会用add\u fruit(:fruit\u type=>:other\u fruit)来调用它吗?该方法的两个版本做相同的事情。是的,你可以这样调用这个方法(加上其他的例子)。谢谢Justin。谢谢你的帮助。