select
选择元素可能需要大量样板代码才能自动化. 为了减少这种情况并使您的测试更干净, 在Selenium的support包中有一个 Select 类. 要使用它,您将需要以下导入语句
include Selenium::WebDriver::Support
创建select对象
select_element = driver.find_element(id: 'selectElementID')
select_object = Select(select_element)
Select对象现在将为您提供一系列命令,使您可以与
<select>
<option value=value1>Bread</option>
<option value=value2 selected>Milk</option>
<option value=value3>Cheese</option>
</select>
获取
从上述元素中选取第一个选项
# Select an <option> based upon the <select> element's internal index
select_object.select_by(:index, 1)
# Select an <option> based upon its value attribute
select_object.select_by(:value, 'value1')
# Select an <option> based upon its text
select_object.select_by(:text, 'Bread')
遍历
然后,您可以检视所有被选择的选项:
# Return an Array[Element] of options that have been selected
all_selected_options = select_object.selected_options
# Return a WebElement referencing the first selection option found by walking down the DOM
first_selected_option = select_object.first_selected_option
过滤
或者您可能只对 特定元素包含哪些选项的元素感兴趣:
# Return an Array[Element] of options that the <select> element contains
all_available_options = select_object.options
取消选择
如果要取消选择任何元素,现在有四个选项:
# Deselect an <option> based upon the <select> element's internal index
select_object.deselect_by(:index, 1)
# Deselect an <option> based upon its value attribute
select_object.deselect_by(:value, 'value1')
# Deselect an <option> based upon its text
select_object.deselect_by(:text, 'Bread')
# Deselect all selected <option> elements
select_object.deselect_all
多选
最后,一些特定元素允许您选择多个选项. 您可以通过使用以下命令确定您的选中元素是否允许多选:
does_this_allow_multiple_selections = select_object.multiple?