Как создать коллекцию таблиц для ruby/Watir и Page Objects?

У меня есть страница с набором динамических таблиц.
Я хочу иметь возможность перебирать эти таблицы, преобразовывать их в хэш (используя метод .hashes) и сравнивать их с данными в файле .yml. Но я не могу заставить коллекцию работать.

Вот одна попытка (с использованием фиктивной страницы):

class ViewOnlyPages
  include PageObject
  page_url("https://developers.google.com/chart/interactive/docs/examples")

  tables(:all_tables, :class =>'google-visualization-table-table')
  def verify_page_against(page_name, dataset)
  #load data from Yml

  #hash spin through all tables (for each table, read each record into hash?)
  self.all_tables.each do |table|
    puts table.hashes
    puts '---'
  end

end

person Jason Koelewyn    schedule 17.03.2015    source источник


Ответы (1)


Метод доступа tables аналогичен методу доступа elements. Вместо создания метода all_tables создается фактически метод all_tables_elements (обратите внимание на часть «_elements»).

Другими словами, итерация по таблицам должна быть:

self.all_tables_elements.each do |table|
  puts table.hashes
  puts '---'
end

Обратите внимание, что на самом деле это не создаст никакого вывода для страницы примера. Текущее определение таблиц предполагает, что они находятся на главной странице. Однако в этом случае таблица находится в iframe. Вам нужно явно указать, когда искать в фреймах. Чтобы получить вывод, таблица должна быть определена в блоке in_iframe:

in_iframe(:class => 'framebox') do |frame|
  tables(:all_tables, :class =>'google-visualization-table-table', :frame => frame)
end
person Justin Ko    schedule 17.03.2015
comment
Это выглядит хорошо, спасибо. Я использовал вашу страницу в прошлом. Это очень полезно. Я получаю предупреждение об устаревании метода Hashes. Какой-нибудь совет? - person Jason Koelewyn; 17.03.2015
comment
Какую версию драгоценного камня page-object вы используете? Метод Table#hashes был только что добавлен в v1.0.3 (последняя версия). - person Justin Ko; 17.03.2015
comment
Я только что проследил это. Обновление моей жемчужины сейчас. Спасибо! - person Jason Koelewyn; 17.03.2015