Class: Selenium::WebDriver::Support::Select

Inherits:
Object
  • Object
show all
Defined in:
lib/selenium/webdriver/support/select.rb

Defined Under Namespace

Modules: Escaper

Instance Method Summary collapse

Constructor Details

#initialize(element) ⇒ Select



29
30
31
32
33
34
35
36
37
38
# File 'lib/selenium/webdriver/support/select.rb', line 29

def initialize(element)
  tag_name = element.tag_name

  unless tag_name.downcase == "select"
    raise ArgumentError, "unexpected tag name #{tag_name.inspect}"
  end

  @element = element
  @multi   = ![nil, "false"].include?(element.attribute(:multiple))
end

Instance Method Details

#deselect_allObject

Deselect all selected options. Only valid if the element supports multiple selections.

Raises:



158
159
160
161
162
163
164
# File 'lib/selenium/webdriver/support/select.rb', line 158

def deselect_all
  unless multiple?
    raise Error::UnsupportedOperationError, 'you may only deselect all options of a multi-select'
  end

  options.each { |e| deselect_option e }
end

#deselect_by(how, what) ⇒ Object

Deselect options by visible text, index or value.

Raises:

See Also:



125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/selenium/webdriver/support/select.rb', line 125

def deselect_by(how, what)
  case how
  when :text
    deselect_by_text what
  when :value
    deselect_by_value what
  when :index
    deselect_by_index what
  else
    raise ArgumentError, "can't deselect options by #{how.inspect}"
  end
end

#first_selected_optionElement

Get the first selected option in this select element

Raises:



77
78
79
80
# File 'lib/selenium/webdriver/support/select.rb', line 77

def first_selected_option
  option = options.find { |e| e.selected? }
  option or raise Error::NoSuchElementError, 'no options are selected'
end

#multiple?Boolean

Does this select element support selecting multiple options?



46
47
48
# File 'lib/selenium/webdriver/support/select.rb', line 46

def multiple?
  @multi
end

#optionsArray<Element>

Get all options for this select element



56
57
58
# File 'lib/selenium/webdriver/support/select.rb', line 56

def options
  @element.find_elements :tag_name, 'option'
end

#select_allObject

Select all unselected options. Only valid if the element supports multiple selections.

Raises:



144
145
146
147
148
149
150
# File 'lib/selenium/webdriver/support/select.rb', line 144

def select_all
  unless multiple?
    raise Error::UnsupportedOperationError, 'you may only select all options of a multi-select'
  end

  options.each { |e| select_option e }
end

#select_by(how, what) ⇒ Object

Select options by visible text, index or value.

When selecting by :text, selects options that display text matching the argument. That is, when given “Bar” this would select an option like:

<option value="foo">Bar</option>

When slecting by :value, selects all options that have a value matching the argument. That is, when given “foo” this would select an option like:

<option value="foo">Bar</option>

When selecting by :index, selects the option at the given index. This is done by examining the “index” attribute of an element, and not merely by counting.



102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/selenium/webdriver/support/select.rb', line 102

def select_by(how, what)
  case how
  when :text
    select_by_text what
  when :index
    select_by_index what
  when :value
    select_by_value what
  else
    raise ArgumentError, "can't select options by #{how.inspect}"
  end
end

#selected_optionsArray<Element>

Get all selected options for this select element



66
67
68
# File 'lib/selenium/webdriver/support/select.rb', line 66

def selected_options
  options.select { |e| e.selected? }
end