获得水豚testing的下拉select值

我必须为网站编写testing。 我正在尝试获取下拉框的选定值。 到目前为止,我可以通过做下拉菜单的内容

find_field('restrictions__rating_movies').text 

返回 – 不允许电影G PG M 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> 

在这种情况下显示我需要得到值'允许所有电影'我已经尝试了上述两个例子的许多不同的组合。

如果你在have_select使用have_select有一个have_select匹配器:

 expect(page).to have_select('my-select', selected: 'Option 2') 
 find_field('restrictions__rating_movies').find('option[selected]').text 

非常简单的方法来获得选定的选项的价值是:

 find("#restrictions__rating_movies").value 

这将返回选定的选项值。

如果你只需要断言,如果一个字段被选中给定的选项,直接的答案是

 #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 

资料来源: http : //rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers#has_select%3F-instance_method

但问题的标题是“获取下拉select值” 。 而且我遇到了一个类似的问题,我不仅要声明select,还要检索所选字段的文本和值。 我发现没有直接的API。 我find的最简单的方法是: #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,您可以使用#select代替#find,如在#all("option").select &:selected? 。 它将返回一个数组。

这个答案不依赖于前面select的“选项”选项,所以即使select是通过Javascript完成的(这也是之前的答案根本不适用于我的原因)。

testing:

 capybara (2.2.1) capybara-webkit (1.1.0) cucumber (1.3.14) cucumber-rails (1.4.0) 

会这样的工作吗?

 within("//select[@id='restrictions__rating_movies']") do find_field("//option[@selected='selected']").text end