在PageObject中为#<array:0x3db6090>(NoMethodError)获取未定义的方法`when_visible'

时间:2016-03-02 19:50:07

标签: ruby selenium-webdriver cucumber page-object-gem

当我使用PageObject Ruby gem中的内置-in方法时,我正在为#(NoMethodError)获取未定义的方法`when_visible'。这是我的代码:

class HomePage
  include PageObject

  links(:search_types, :css => ".search-type")

  def select_search_type
    search_types_elements.when_visible(timeout=10)
    search_types_elements.find { |type| if type.text=='Resort'; type.click; break end }
  end
end

有人可以帮忙吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

已更新,以反映讨论情况。

page-object gem处理其复数的基本访问器。 Page-object最终生成

search_types_elements = @browser.find_elements(:css, ".search-type") 

因此您需要使用(更新

之类的内容
search_types_elements.find { |type| 
  type.when_visible(timeout=10)
  if type.text=='Resort'; type.click; break end
}

您应该向页面类构造函数添加一些内容以等待页面完全加载。不幸的是,没有一种简单的方法可以做到这一点。很大程度上取决于页面细节。我通常首先等待jquery队列的长度为零。像这样:

WebDriverWait(self.selenium, 10).until(lambda s:  s.execute_script("return jQuery.active == 0"))