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



10
11
12
13
14
15
16
17
18
19
# File 'lib/selenium/webdriver/support/select.rb', line 10

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:



138
139
140
141
142
143
144
# File 'lib/selenium/webdriver/support/select.rb', line 138

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.

See Also:



105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/selenium/webdriver/support/select.rb', line 105

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:



58
59
60
61
# File 'lib/selenium/webdriver/support/select.rb', line 58

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)


27
28
29
# File 'lib/selenium/webdriver/support/select.rb', line 27

def multiple?
  @multi
end

#optionsArray<Element>

Get all options for this select element

Returns:



37
38
39
# File 'lib/selenium/webdriver/support/select.rb', line 37

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

#select_allObject

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

Raises:



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

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.



83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/selenium/webdriver/support/select.rb', line 83

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:



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

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