水豚:按价值而不是文字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'
在这里查看更多关于水豚的信息 。