我必须为网站编写测试。我试图获取下拉框的选定值。到目前为止,我可以通过
获取下拉列表的内容find_field('restrictions__rating_movies').text
返回 - 不要让电影 G PG 中号 R13 R15 R16 R18 [R RP16 允许所有电影
我可以获取所选对象的值。
find_field('restrictions__rating_movies').value
返回 - 1000
这对我没什么帮助,因为我试图从下拉框中获取所选项目的文本。
<select class="" id="restrictions__rating_movies" name="restrictions[][rating_movies]">
<option value="0">Don't Allow Movies</option>
<option value="100">G</option>
<option value="200">PG</option>
<option value="300">M</option>
<option value="325">R13</option>
<option value="350">R15</option>
<option value="375">R16</option>
<option value="400">R18</option>
<option value="500">R</option>
<option value="600">RP16</option>
<option value="1000" selected="selected">Allow All Movies</option></select>
在这种情况下显示我需要获取值'允许所有电影'我已经尝试了上述两个示例的许多不同组合。
答案 0 :(得分:148)
如果你将Capybara与Rspec一起使用,那就有一个have_select
匹配器:
expect(page).to have_select('my-select', selected: 'Option 2')
答案 1 :(得分:39)
find_field('restrictions__rating_movies').find('option[selected]').text
答案 2 :(得分:13)
获取所选选项值的非常简单的方法是:
find("#restrictions__rating_movies").value
这将返回所选的选择选项值。
答案 3 :(得分:3)
如果您只需断言是否使用给定选项选择了一个字段,那么直截了当的答案是
#Find a select box by (label) name or id and assert the given text is selected
When /^select box "([^"]*)" is selected with "([^"]*)"$/ do |dropdown, selected_text|
assert page.has_select?(dropdown, selected: selected_text)
end
但您问题的标题是&#34;获取下拉菜单的选择值&#34; 。
而且我遇到了类似的问题,我不仅要断言选择,还要检索所选字段的文本和值。我在API上找不到直接的方法。我发现的最简单的方法是:#all("option").find &:selected?
When /^ select box "([^"]*)" is selected with "([^"]*)"$/ do |dropdown, selected_text|
sb = find_field(dropdown)
sb_selected = sb.all("option").find &:selected?
msg = "Selected: #{sb_selected.text.inspect} - value:#{sb_selected.value.inspect}"
assert page.has_select?(dropdown, selected: selected_text), msg
end
当断言失败时,这会给我一个更全面的错误消息。
如果有多个选项,您可以使用#select代替#find,就像#all("option").select &:selected?
一样。它将返回一个数组。
这个答案并不依赖于[选择]&#39;选项。与之前的技巧相同,所以即使选择是通过Javascript完成的(这也是之前的答案对我来说根本不起作用的原因),它也能正常工作。
经过测试:
capybara (2.2.1)
capybara-webkit (1.1.0)
cucumber (1.3.14)
cucumber-rails (1.4.0)
答案 4 :(得分:1)
如果你想找到当前选中的文本,而不是假设它可能是什么,以便你可以将它与期望进行比较,即使选择是由JS做出的,所以下面也可以工作(这样就没有'选项[选择]')。
首先我找到select的值,然后找到带有该值的选项文本:
def selected(selector)
value = find(selector).value
text = find(selector).find("option[value='#{value}']").text
end
答案 5 :(得分:0)
创建一个简单的函数来返回给定 select
元素(下拉菜单)的文本:
def get_dropdown_selected_item_text(dropdown)
value = dropdown.value
return dropdown.all(:css, "option").select {|opt| opt.value == value} .first.text
end
答案 6 :(得分:-1)
这样的事情会起作用吗?
within("//select[@id='restrictions__rating_movies']") do
find_field("//option[@selected='selected']").text
end