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

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

Instance Method Summary collapse

Constructor Details

#initialize(element) ⇒ Select

Returns a new instance of Select.

Parameters:

  • element (Element)

    The select element to use



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

def initialize(element)
  tag_name = element.tag_name

  unless tag_name.casecmp('select').zero?
    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.

Parameters:

  • how (:text, :index, :value)

    How to find the option

  • what (String)

    What value to find the option by.

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

Returns:

Raises:



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

def first_selected_option
  option = options.find(&:selected?)
  return option if option
  raise Error::NoSuchElementError, 'no options are selected'
end

#multiple?Boolean

Does this select element support selecting multiple options?

Returns:

  • (Boolean)


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

def multiple?
  @multi
end

#optionsArray<Element>

Get all options for this select element

Returns:



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

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.

Parameters:

  • how (:text, :index, :value)

    How to find the option

  • what (String)

    What value to find the option by.



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

Returns:



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

def selected_options
  options.select(&:selected?)
end