水豚:按价值而不是文字select一个选项

对于HTML

<select id="date"> <option value="20120904">Tue 4 Sep 2012</option> <option value="20120905">Wed 5 Sep 2012</option> <option value="20120906">Thu 6 Sep 2012</option> </select> 

我有以下Capybara Ruby代码:

 select "20120905", :from => "date" 

但是这个错误与:

 cannot select option, no option with text '20120905' in select box 'date' (Capybara::ElementNotFound) 

但是,如果我这样做

 select "Wed 5 Sep 2012", :from => "date" 

没关系。

是否可以通过价值而不是文本在水豚中select一个选项?

谢谢

这将有助于按值select一个选项:

 find("option[value='20120905']").click 

为了保持select器的作用域,你可以把它封装在块内,如下所示:

 within '#date' do find("option[value='20120905']").click end 

用Poltergeist作为驱动程序,我不能点击上面的一些其他选项中build议的选项,而是可以执行以下操作:

page.find_by_id('date').find("option[value='20120905']").select_option

我写了一个帮手方法:

 def select_by_value(id, value) option_xpath = "//*[@id='#{id}']/option[@value='#{value}']" option = find(:xpath, option_xpath).text select(option, :from => id) end 

保存在.rb文件中的spec / support /

使用示例:

 before do select_by_value 'some_field_id', 'value' click_button 'Submit' end 

您也可以通过执行以下操作来实现它:

 find_by_id('date').find("option[value='20120905']").click 

这个帮手方法很聪明。 我会改变一点:

 def select_by_value(id, value) option_xpath = "//*[@id='#{id}']/option[@value='#{value}']" find(:xpath, option_xpath).click 

结束

要不就:

 find(:xpath, "//select[@id='date']/option[@value='20120904']").click 

在我的情况下,我有几个选项相同的文本,这就是为什么我需要select的价值。 结合几个答案我find了最好的解决scheme:

 def select_by_value(id,value)
   option_xpath =“// * [@ id ='#{id}'] / option [@value ='#{value}']”
   find(:xpath,option_xpath).select_option
结束

点击使用find_field工作正常:

 find_field("date").find("option[value='20120905']").click 

您也可以使用看起来首先匹配文本的水豚 ,然后匹配的价值。

 # define your form widget, in this case in a role class UserRole < Capybara::UI::Role form :my_form do select :my_select, 'my_select' end end # then just submit your form params via #submit role = UserRole.new role.submit :my_form, my_select: '20120905' 

在这里查看更多关于水豚的信息 。