如何处理具有自定义html属性的多选列表?

时间:2013-04-23 15:54:16

标签: ruby rubygems cucumber watir watir-webdriver

<select class="business_group" multiple="multiple" name="SelectedBusinessGroups">
  <option value="Partners">Partners</option>
  <option value="Press">Press</option>
  <option value="ProductToolbox">Product Toolbox</option>
  <option selected="selected" value="Promotional">Promotional</option>
  <option value="Sponsors">Sponsors</option>
</select>

由于名为:selected的属性表示单击该选项。 我想检查选项列表中是否选择了“促销”。 我怎么能这样做?

我试过

assert @browser.option(:text => "Promotional").attribute_value("selected").exists? == true

但它不起作用。

1 个答案:

答案 0 :(得分:4)

您有几个选项可以检查所选的选项。

选择选项#?

选项有一个内置方法可以告诉您它们是否被选中 - 请参阅Option#selected?

@browser.option(:text => "Promotional").selected?
#=> true

@browser.option(:text => "Press").selected?
#=> false

使用Select#selected?

选择列表有一个内置方法,用于检查是否选择了选项 - Select#selected?。请注意,这仅根据文本检查选项。

ddl = @browser.select(:class => 'business_group')

ddl.selected?('Promotional')
#=> true

ddl.selected?('Press')
#=> false

使用Select#selected_options

Select#selected_options方法将返回所选选项的集合。您遍历此集合以查看是否包含所需的选项。这允许您通过多于其文本检查选项。

selected = @browser.select(:class => 'business_group').selected_options
selected.any?{ |o| o.text == 'Promotional' }
#=> true

使用Element#attribute_value

如果属性存在,attribute_value方法将返回属性值作为字符串。如果该属性不存在,则返回nil。

#Compare the attribute value
@browser.option(:text => "Promotional").attribute_value("selected") == 'true'
#=> true

#Compare the attribute value presence
@browser.option(:text => "Promotional").attribute_value("selected").nil? == false
#=> true