下拉菜单元素
概述
下拉菜单由两种元素类型组成:Watir::Select
和 Watir::Option
可以通过调用 Browser#select
或 Browser#select_list
来访问它们。创建 SelectCollection
可以通过 Browser#selects
或 Browser#select_lists
来实现,而创建 OptionColection
可以通过 Browser#options
或 Select#options
来实现。有关定位 Select
元素的不同方法,请查看我们的 元素定位指南。
请注意,Option
元素通常应通过 Select
元素实例来访问。
浏览器驱动程序 对 Option
元素的处理方式与其他元素不同。它们是唯一不需要在页面上显示即可点击的元素类型。这意味着您不必先点击 Select
元素就可以使用它。
请注意,许多下拉菜单实现将 JavaScript 与非标准元素结合使用来实现此效果。由于这些元素的处理方式与 Option 和 Select 元素不同,因此 Watir 无法将它们视为下拉菜单。
Select
和 Option
元素也继承了标准 网页元素 的方法。
常用或特殊方法
Select#include?
Select#select
Select#text
Select#value
Select#clear
- 这仅适用于复选框具有multiple
属性的情况
标准设置器接口
此功能在 Watir 7 beta 2 中添加。
Select#set
是 #select
的别名。它接受多种不同的参数类型。
- 当第一个参数值为
String
或Regexp
时,Watir 将选择第一个通过value
、text
或label
属性匹配的Option
。 - 当第一个参数值为
Numeric
时,Watir 将将其转换为字符串,并选择第一个通过 value、text 或 label 属性匹配的Option
。 - 当使用
:value
、:text
或:label
关键字时,Watir 将选择第一个在该特定属性上匹配的Option
。 - 当传入
Array
或多个参数时,Watir 将Select
对象视为具有multiple
属性,并将选择每个通过value
、text
或label
属性匹配Array
中每个值的Option
。
示例
browser = Watir::Browser.start 'watir.com/examples/simple_form.html'
# Non-Multiple Select List
country_dropdown = browser.select(id: 'country')
country_dropdown.text == 'select your country' # => true
country_dropdown.include? '1' # => true
country_dropdown.include? 'Sweden' # => true
country_dropdown.select /en/
country_dropdown.value == '1' # => true
country_dropdown.select(text: 'Denmark')
country_dropdown.selected?('Denmark') == true # => true
country_dropdown.select(text: 'Denmark')
country_dropdown.selected?('1') == true # => true
country_dropdown.select(value: '2')
country_dropdown.selected?('Norway') == true # => true
country_dropdown.select(label: 'Sverige')
country_dropdown.selected?('Sweden') == true # => true
# Multiple Select List
country_dropdown = browser.select(id: 'languages')
country_dropdown.text == 'EN' # => true (first matching option)
country_dropdown.clear
country_dropdown.text.nil? # => true
country_dropdown.select /an/ # Not an Array, so only first matching selected
country_dropdown.value == '1' # => true
country_dropdown.selected?('3') == false # => true
country_dropdown.select [/an/] # An Array, so only first matching selected
country_dropdown.value == '1' # => true (value of first selected)
country_dropdown.selected?('3') == true # => true (all matching selected)
browser.close