如何在选择列表中选择特定选项?

时间:2016-12-01 22:32:38

标签: ruby watir watir-classic

我试图选择选项2,但首先选择2然后更改为1.

这是选择列表的HTML:

<select id="IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id">
  <option style="background-color: rgb(252, 218, 175);" value="-1">Select</option>
  <option value="1">0</option>
  <option value="2">1</option>
  <option value="3">2</option>
  <option value="4">3</option>
  <option value="5">4</option>
  <option value="1000000">5</option>
  <option value="1000001">more than 5</option>
</select>

这是用于选择2的Watir代码:

b.select_list(:id,"IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id").select "2"

3 个答案:

答案 0 :(得分:2)

问题是你使用的是Watir-Classic的select方法,其参数既可以与选项的文本相匹配,也可以与其他选项的值相匹配。

如果您查看code for the Watir::SelectList#select method

def select(item)
  matching_options = []
  perform_action do
    matching_options = matching_items_in_select_list(:text, item) +
      matching_items_in_select_list(:label, item) +
      matching_items_in_select_list(:value, item)
    raise NoValueFoundException, "No option with :text, :label or :value of #{item.inspect} in this select element" if matching_options.empty?
    matching_options.each(&:select)
  end
  first_present_option_value matching_options, :text
end   

你可以看到:

  1. 根据文字,标签和价值
  2. 获取匹配选项列表
  3. 然后,对于每个匹配选项,Watir-Classic选择它。
  4. 对于您的具体示例,这意味着

    1. 2个选项与输入“2”匹配:
      • <option value="2">1</option>匹配,因为其value为“2”
      • <option value="3">2</option>匹配,因为其text为“2”
    2. Watir-Classic按此特定顺序选择每个选项,这就是为什么您看到下拉开关为“1”然后“2”
    3. 的原因

      考虑到编写方法的方式以及编写选择列表的方式,您无法使用select方法。虽然最好的选择是转移到Watir(之前是Watir-Webdriver),但是在Watir-Classic中有解决方法。

      通过专门选择仅基于value属性的选项来消除歧义:

      id = "IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id"
      b.select_list(:id, id).select_value "3"
      #=> will select <option value="3">2</option>
      

      如果您想坚持按文字选择,请直接找到/选择选项元素:

      id = "IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id"
      b.select_list(:id, id).option(:text, "2").select
      #=> will select <option value="3">2</option>
      

答案 1 :(得分:1)

对于Watir,您可以使用基于索引的选项,只需要担心索引。例如:

<option value="2">1</option>

我们可以使用,

browser.select_list(id: 'IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id').options[2].select

因为它是给定select_list的第3个索引,它遵循基于零的索引排序。同样地,

<option value="3">2</option>

我们可以使用

browser.select_list(id: 'IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id').options[3].select

因为它是给定select_list的第四个索引。

答案 2 :(得分:0)

#select与文字匹配。 如果您想按值选择,则需要使用#select_value

b.select_list(id: "IDITForm@additionalVehicleDrivers|1@youngestDriverExperienceVO@id").select_value "2"