Class: DotDiff::ElementHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/dotdiff/element_handler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(driver, elements = DotDiff.xpath_elements_to_hide) ⇒ ElementHandler

Returns a new instance of ElementHandler.



7
8
9
10
# File 'lib/dotdiff/element_handler.rb', line 7

def initialize(driver, elements = DotDiff.xpath_elements_to_hide)
  @driver = driver
  @elements = elements
end

Instance Attribute Details

#driverObject

Returns the value of attribute driver.



5
6
7
# File 'lib/dotdiff/element_handler.rb', line 5

def driver
  @driver
end

Instance Method Details

#elementsObject



38
39
40
# File 'lib/dotdiff/element_handler.rb', line 38

def elements
  @elements ||= []
end

#hideObject



12
13
14
15
16
# 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) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
# 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

#showObject



18
19
20
21
22
# File 'lib/dotdiff/element_handler.rb', line 18

def show
  elements.each do |xpath|
    driver.execute_script(script(xpath, :''))
  end
end