lib/page-object/elements/table.rb in page-object-2.2 vs lib/page-object/elements/table.rb in page-object-2.2.1

- old
+ new

@@ -6,24 +6,15 @@ # # iterator that yields with a PageObject::Elements::TableRow # # @return [PageObject::Elements::TableRow] # - def each - for index in 1..self.rows do - yield self[index-1] - end + def each(&block) + row_items.each(&block) end - # - # return the first row - # - # @return PageObject::Elements::TableRow - # - def first_row - self[0] - end + alias_method :first_row, :first # # return the last row # # @return PageObject::Elements::TableRow @@ -31,56 +22,46 @@ def last_row self[-1] end # - # return the table as hashes - # - # @return Hash - # - def hashes - headers = self.first_row.map(&:text) - self.entries[1..-1].map do |row| - Hash[headers.zip(row.map(&:text))] - end - end - - # # Return the PageObject::Elements::TableRow for the index provided. Index # is zero based. If the index provided is a String then it # will be matched with the text from any column. The text can be a substring of the full column text. # # @return [PageObject::Elements::TableRow] # - def [](idx) - idx = find_index_by_title(idx) if idx.kind_of?(String) - return nil unless idx - initialize_row(element[idx]) + def [](what) + idx = find_index(what) + idx && row_items[idx] end # # Returns the number of rows in the table. # def rows - element.wd.find_elements(:xpath, child_xpath).size + row_items.size end protected - def child_xpath - ".//child::tr" + def row_items + meth = strategy == :descendants ? :trs : :rows + @row_items ||= element.send(meth).map do |obj| + ::PageObject::Elements::TableRow.new(obj) + end end - def initialize_row(row_element) - ::PageObject::Elements::TableRow.new(row_element) + def strategy + :children end - def find_index_by_title(row_title) - element.rows.find_index do |row| - row.cells.any? { |col| col.text.include? row_title } + def find_index(what) + return what if what.is_a? Integer + row_items.find_index do |row| + row.cell(text: /#{what}/).exist? end end - end ::PageObject::Elements.tag_to_class[:table] = ::PageObject::Elements::Table end end