对于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"
没关系。
是否可以通过值而不是文本在Capybara中选择一个选项?
由于
答案 0 :(得分:69)
这将按值选择一个选项:
find("option[value='20120905']").click
要维护选择器的范围,可以将其包装在内部块中:
within '#date' do
find("option[value='20120905']").click
end
答案 1 :(得分:39)
使用Poltergeist作为驱动程序我无法点击上面某些其他选项中建议的选项,而是可以执行以下操作:
page.find_by_id('date').find("option[value='20120905']").select_option
答案 2 :(得分:19)
我写了一个辅助方法:
def select_by_value(id, value)
option_xpath = "//*[@id='#{id}']/option[@value='#{value}']"
option = find(:xpath, option_xpath).text
select(option, :from => id)
end
保存在 spec / support /
中的.rb文件中使用示例:
before do
select_by_value 'some_field_id', 'value'
click_button 'Submit'
end
答案 3 :(得分:4)
您还可以通过执行以下操作来实现它:
find_by_id('date').find("option[value='20120905']").click
答案 4 :(得分:2)
那个辅助方法非常聪明。我会稍微改变一下:
def select_by_value(id, value)
option_xpath = "//*[@id='#{id}']/option[@value='#{value}']"
find(:xpath, option_xpath).click
end
或只是:
find(:xpath, "//select[@id='date']/option[@value='20120904']").click
答案 5 :(得分:1)
在我的情况下,我有几个相同文本的选项,这就是我需要按值选择的原因。结合几个答案,我找到了最适合我的解决方案:
def select_by_value(id, value) option_xpath = "//*[@id='#{id}']/option[@value='#{value}']" find(:xpath, option_xpath).select_option end
答案 6 :(得分:0)
点击使用find_field正常工作:
find_field("date").find("option[value='20120905']").click
答案 7 :(得分:0)
您还可以使用capybara-ui首先匹配文字,然后匹配该值。
# 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'
详细了解capybara-ui表格here。
答案 8 :(得分:0)
如果字段不可见,试试这个
find("#date", visible: false).find("option[value='20120905']").click
或范围为:
within '#date', visible: false do
find("option[value='20120905']").click
end