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