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

Getting undefined method `when_visible' for #<Array:0x3db6090> (NoMethodError) in PageObject

当我使用来自 PageObject Ruby gem 的内置方法时,我得到了 Getting undefined method `when_visible' for # (NoMethodError)。这是我的代码:

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

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

更新以反映讨论。

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

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

因此您需要在其后添加类似 (Updated)

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

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

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