Class: Capybara::Driver::Envjs::Node

Inherits:
Node
  • Object
show all
Defined in:
lib/capybara/driver/envjs_driver.rb

Instance Method Summary collapse

Instance Method Details

#[](name) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/capybara/driver/envjs_driver.rb', line 30

def [](name)
  value = if name.to_sym == :class
    node.className
  else
    node.getAttribute(name.to_s)
  end
  return value if value and not value.to_s.empty?
end

#all_unfiltered(selector) ⇒ Object



111
112
113
114
115
116
117
118
119
120
121
# File 'lib/capybara/driver/envjs_driver.rb', line 111

def all_unfiltered selector
  window = @driver.browser["window"]
  null = @driver.browser["null"]
  type = window["XPathResult"]["ANY_TYPE"]
  result_set = window.document.evaluate selector, node, null, type, null
  nodes = []
  while n = result_set.iterateNext()
    nodes << Node.new(@driver, n)
  end
  nodes
end

#clickObject



93
94
95
# File 'lib/capybara/driver/envjs_driver.rb', line 93

def click
  _event(self,"MouseEvent",'click',true,true)
end

#drag_to(element) ⇒ Object



97
98
99
100
101
# File 'lib/capybara/driver/envjs_driver.rb', line 97

def drag_to(element)
  _event(self,"MouseEvent",'mousedown',true,true)
  _event(element,"MouseEvent",'mousemove',true,true)
  _event(element,"MouseEvent",'mouseup',true,true)
end

#select(option) ⇒ Object



69
70
71
72
73
74
75
76
# File 'lib/capybara/driver/envjs_driver.rb', line 69

def select(option)
  escaped = Capybara::XPath.escape(option)
  option_node = all_unfiltered("//option[text()=#{escaped}]") || all_unfiltered("//option[contains(.,#{escaped})]")
  option_node[0].node.selected = true
rescue Exception => e
  options = all_unfiltered(".//option").map { |o| "'#{o.text}'" }.join(', ')
  raise Capybara::OptionNotFound, "No such option '#{option}' in this select box. Available options: #{options}"
end

#set(value) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/capybara/driver/envjs_driver.rb', line 56

def set(value)
  case node.tagName
  when "TEXTAREA"
    node.innerText = value
  else
    case node.getAttribute("type")
    when "checkbox", "radio"
      node.click if node.checked != value
    else; node.setAttribute("value",value)
    end
  end
end

#tag_nameObject



103
104
105
# File 'lib/capybara/driver/envjs_driver.rb', line 103

def tag_name
  node.tagName.downcase
end

#textObject



26
27
28
# File 'lib/capybara/driver/envjs_driver.rb', line 26

def text
  node.innerText
end

#trigger(event) ⇒ Object



123
124
125
126
# File 'lib/capybara/driver/envjs_driver.rb', line 123

def trigger event
  # FIX: look up class and attributes
  _event(self, "", event.to_s, true, true )
end

#unselect(option) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/capybara/driver/envjs_driver.rb', line 78

def unselect(option)
  if !node['multiple']
    raise Capybara::UnselectNotAllowed, "Cannot unselect option '#{option}' from single select box."
  end

  begin
    escaped = Capybara::XPath.escape(option)
    option_node = (all_unfiltered("//option[text()=#{escaped}]") || all_unfiltered("//option[contains(.,#{escaped})]")).first
    option_node.node.selected = false
  rescue Exception => e
    options = all_unfiltered(".//option").map { |o| "'#{o.text}'" }.join(', ')
    raise Capybara::OptionNotFound, "No such option '#{option}' in this select box. Available options: #{options}"
  end
end

#visible?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/capybara/driver/envjs_driver.rb', line 107

def visible?
  all_unfiltered("./ancestor-or-self::*[contains(@style, 'display:none') or contains(@style, 'display: none')]").empty?
end