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

Inherits:
Object
  • Object
show all
Defined in:
rb/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

Raises:

  • (ArgumentError)


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

def initialize(element)
  tag_name = element.tag_name

  raise ArgumentError, "unexpected tag name #{tag_name.inspect}" unless tag_name.casecmp('select').zero?

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

Instance Method Details

#deselect_allObject

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

Raises:



155
156
157
158
159
# File 'rb/lib/selenium/webdriver/support/select.rb', line 155

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

  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:



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

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:



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

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)


43
44
45
# File 'rb/lib/selenium/webdriver/support/select.rb', line 43

def multiple?
  @multi
end

#optionsArray<Element>

Get all options for this select element

Returns:



53
54
55
# File 'rb/lib/selenium/webdriver/support/select.rb', line 53

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

#select_allObject

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

Raises:



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

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

  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 selecting 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.



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

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:



63
64
65
# File 'rb/lib/selenium/webdriver/support/select.rb', line 63

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