使用populate_page_with data_for时如何等待元素加载到页面对象中?

时间:2013-11-22 05:12:15

标签: ruby watir watir-webdriver page-object-gem

我正在使用Watir-webdriver的页面对象gem。在这里,我使用“populate_page_with”功能,当有一些元素需要加载时,我无法使用它。

在下面的脚本中,我应该输入:sum_ctgy:sd:foregin的详细信息,然后我应该等待:sumc可见。我正在使用populate_page_with data_for方法,在yml文件中使用如下数据

sumdetailspage:
  sum_ctgy: Test1
  sd: Test2
  sumc: 502
  sumd: -450

请告诉我使用populate方法解决此问题的更好方法。

 class SumDetailsPage
  include PageObject
  include DataMagic

  select_list(:sum_ctgy, :name => /categoryDescription/) --> send details
  text_field(:sd, :id => /sumDestination/) --> continue
  text_field(:foreign, :name => /foreignSymbol/) --> continue
  div(:pw, :id => /PleaseWaitMessage/) --> please wait behavior to complete(until hidden)
  text_field(:sumc, :id => /sumCalc/) --> then continue, but it is not waiting for this element to load
  text_field(:sumd, :id => /sumCalcdep/)

  def train_details(data = {})
    DataMagic.load('traindata.yml')
    populate_page_with data_for(:sumdetailspage, data)
    pw_element.when_not_visible  --> wait
    populate_page_with data_for(:sumdetailspage, data) --> again continue...
  end
end

1 个答案:

答案 0 :(得分:3)

我建议为sumc元素提供一个块,以便它总是等待消息消失。这是有益的,因为任何与文本字段的交互将始终等待 - 即,如果您正在设置,获取等等

text_field(:sumc){ 
  pw_element.when_not_visible
  text_field_element(:id => /sumCalc/)
}

然后您可以像往常一样使用populate_page_with。

注意:这假设您使用的是Ruby 1.9+,其中维护了哈希的插入顺序 - 即page_populate_with将输入:sum_ctgy,:sd和:foregin then:sumc(并假设这是顺序你在中指定它们。