class DotDiff::ElementHandler

Attributes

driver[RW]

Public Class Methods

new(driver, elements = DotDiff.xpath_elements_to_hide) click to toggle source
# File lib/dotdiff/element_handler.rb, line 7
def initialize(driver, elements = DotDiff.xpath_elements_to_hide)
  @driver = driver
  @elements = elements
end

Public Instance Methods

elements() click to toggle source
# File lib/dotdiff/element_handler.rb, line 38
def elements
  @elements ||= []
end
hide() click to toggle source
# File lib/dotdiff/element_handler.rb, line 12
def hide
  elements.each do |xpath|
    driver.execute_script(script(xpath, :hidden))
  end
end
script(xpath, visibility) click to toggle source
# File lib/dotdiff/element_handler.rb, line 24
def script(xpath, visibility)
  xpath += if visibility == :hidden
             "[not(contains(@style, 'visibility'))]"
           else
             "[contains(@style, 'visibility: hidden')]"
           end

  # this is done like so instead of a single pass over all elements due to a bug in Firefox:
  # https://greasyfork.org/en/forum/discussion/12223/xpath-iteratenext-fails-in-firefox
  "var elem; while (elem = document.evaluate(\"#{xpath}\", document, "\
    'null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null).iterateNext()) '\
    "{ elem.style.visibility = '#{visibility}'; }"
end
show() click to toggle source
# File lib/dotdiff/element_handler.rb, line 18
def show
  elements.each do |xpath|
    driver.execute_script(script(xpath, :''))
  end
end