我试图选择选项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"
答案 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
你可以看到:
对于您的具体示例,这意味着
<option value="2">1</option>
匹配,因为其value
为“2”<option value="3">2</option>
匹配,因为其text
为“2”考虑到编写方法的方式以及编写选择列表的方式,您无法使用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"