获得水豚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