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

Returns a new instance of Select.

Parameters:

  • element (Element)

    The select element to use



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.

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:



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?

Returns:

  • (Boolean)


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

Returns:



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.

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:



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

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