module CapybaraTable::XPath

Public Instance Methods

cell_position(node) click to toggle source
# File lib/capybara_table.rb, line 34
def cell_position(node)
  siblings = node.preceding_sibling(:td, :th)

  without_colspan = siblings[attr(:colspan).inverse].count
  with_colspan = siblings.attr(:colspan).sum
  exists = node.boolean.number

  without_colspan.plus(with_colspan).plus(exists)
end
header_position(header) click to toggle source
# File lib/capybara_table.rb, line 29
def header_position(header)
  header_node = ancestor(:table)[1].descendant(:tr)[1].descendant(:th)[string.n.is(header)]
  cell_position(header_node)
end
self_position() click to toggle source
# File lib/capybara_table.rb, line 25
def self_position
  cell_position(self_axis)
end
table(caption) click to toggle source
# File lib/capybara_table.rb, line 11
def table(caption)
  descendant(:table)[descendant(:caption).string.n.is(caption)]
end
table_cell(header, value) click to toggle source
# File lib/capybara_table.rb, line 21
def table_cell(header, value)
  descendant(:td, :th)[string.n.is(value).and(header_position(header).equals(self_position))]
end
table_row(fields) click to toggle source
# File lib/capybara_table.rb, line 15
def table_row(fields)
  fields.reduce(descendant(:tr)) do |xpath, (header, value)|
    xpath[table_cell(header, value)]
  end
end