Class: Capybara::Selenium::Node

Inherits:
Driver::Node show all
Defined in:
lib/capybara/selenium/node.rb

Instance Attribute Summary

Attributes inherited from Driver::Node

#driver, #native

Instance Method Summary (collapse)

Methods inherited from Driver::Node

#initialize, #inspect, #path, #trigger

Constructor Details

This class inherits a constructor from Capybara::Driver::Node

Instance Method Details

- (Object) ==(other)



118
119
120
# File 'lib/capybara/selenium/node.rb', line 118

def ==(other)
  native == other.native
end

- (Object) [](name)



12
13
14
15
16
# File 'lib/capybara/selenium/node.rb', line 12

def [](name)
  native.attribute(name.to_s)
rescue Selenium::WebDriver::Error::WebDriverError
  nil
end

- (Object) all_text



7
8
9
10
# File 'lib/capybara/selenium/node.rb', line 7

def all_text
  text = driver.browser.execute_script("return arguments[0].textContent", native)
  Capybara::Helpers.normalize_whitespace(text)
end

- (Object) click



70
71
72
# File 'lib/capybara/selenium/node.rb', line 70

def click
  native.click
end

- (Boolean) disabled?

Returns:

  • (Boolean)


104
105
106
# File 'lib/capybara/selenium/node.rb', line 104

def disabled?
  !native.enabled?
end

- (Object) double_click



78
79
80
# File 'lib/capybara/selenium/node.rb', line 78

def double_click
  driver.browser.action.double_click(native).perform
end

- (Object) drag_to(element)



86
87
88
# File 'lib/capybara/selenium/node.rb', line 86

def drag_to(element)
  driver.browser.action.drag_and_drop(native, element.native).perform
end

- (Object) find_css(locator)



114
115
116
# File 'lib/capybara/selenium/node.rb', line 114

def find_css(locator)
  native.find_elements(:css, locator).map { |n| self.class.new(driver, n) }
end

- (Object) find_xpath(locator)



110
111
112
# File 'lib/capybara/selenium/node.rb', line 110

def find_xpath(locator)
  native.find_elements(:xpath, locator).map { |n| self.class.new(driver, n) }
end

- (Object) hover



82
83
84
# File 'lib/capybara/selenium/node.rb', line 82

def hover
  driver.browser.action.move_to(native).perform
end

- (Object) right_click



74
75
76
# File 'lib/capybara/selenium/node.rb', line 74

def right_click
  driver.browser.action.context_click(native).perform
end

- (Object) select_option



59
60
61
# File 'lib/capybara/selenium/node.rb', line 59

def select_option
  native.click unless selected?
end

- (Boolean) selected? Also known as: checked?

Returns:

  • (Boolean)


99
100
101
102
# File 'lib/capybara/selenium/node.rb', line 99

def selected?
  selected = native.selected?
  selected and selected != "false"
end

- (Object) set(value)



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/capybara/selenium/node.rb', line 26

def set(value)
  tag_name = self.tag_name
  type = self[:type]
  if (Array === value) && !self[:multiple]
    raise ArgumentError.new "Value cannot be an Array when 'multiple' attribute is not present. Not a #{value.class}"
  end
  if tag_name == 'input' and type == 'radio'
    click
  elsif tag_name == 'input' and type == 'checkbox'
    click if value ^ native.attribute('checked').to_s.eql?("true")
  elsif tag_name == 'input' and type == 'file'
    path_names = value.to_s.empty? ? [] : value
    native.send_keys(*path_names)
  elsif tag_name == 'textarea' or tag_name == 'input'
    if value.to_s.empty?
      native.clear
    else
      #script can change a readonly element which user input cannot, so dont execute if readonly
      driver.browser.execute_script "arguments[0].value = ''", native unless self[:readonly]
      native.send_keys(value.to_s)
    end
  elsif native.attribute('isContentEditable')
    #ensure we are focused on the element
    script = <<-JS
      var range = document.createRange();
      range.selectNodeContents(arguments[0]);
      window.getSelection().addRange(range);
    JS
    driver.browser.execute_script script, native
    native.send_keys(value.to_s)
  end
end

- (Object) tag_name



90
91
92
# File 'lib/capybara/selenium/node.rb', line 90

def tag_name
  native.tag_name.downcase
end

- (Object) unselect_option



63
64
65
66
67
68
# File 'lib/capybara/selenium/node.rb', line 63

def unselect_option
  if select_node['multiple'] != 'multiple' and select_node['multiple'] != 'true'
    raise Capybara::UnselectNotAllowed, "Cannot unselect option from single select box."
  end
  native.click if selected?
end

- (Object) value



18
19
20
21
22
23
24
# File 'lib/capybara/selenium/node.rb', line 18

def value
  if tag_name == "select" and self[:multiple] and not self[:multiple] == "false"
    native.find_elements(:xpath, ".//option").select { |n| n.selected? }.map { |n| n[:value] || n.text }
  else
    native[:value]
  end
end

- (Boolean) visible?

Returns:

  • (Boolean)


94
95
96
97
# File 'lib/capybara/selenium/node.rb', line 94

def visible?
  displayed = native.displayed?
  displayed and displayed != "false"
end

- (Object) visible_text



2
3
4
5
# File 'lib/capybara/selenium/node.rb', line 2

def visible_text
  # Selenium doesn't normalize Unicode whitespace.
  Capybara::Helpers.normalize_whitespace(native.text)
end