获取水豚测试下拉列表的选择值

Bra*_*don 60 rspec ruby-on-rails capybara

我必须为网站编写测试.我试图获取下拉框的选定值.到目前为止,我可以通过这样做得到下拉列表的内容

find_field('restrictions__rating_movies').text
Run Code Online (Sandbox Code Playgroud)

返回 - 不允许电影G PG M R13 R15 R16 R18 R RP16允许所有电影

我可以获得所选对象的值.

find_field('restrictions__rating_movies').value
Run Code Online (Sandbox Code Playgroud)

返回 - 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>
Run Code Online (Sandbox Code Playgroud)

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

gyl*_*laz 157

have_select如果你将Capybara与Rspec一起使用,那就有一个匹配器:

expect(page).to have_select('my-select', selected: 'Option 2')
Run Code Online (Sandbox Code Playgroud)

  • 我比接受的答案好得多. (24认同)
  • 未来探索者的小记:在这个例子中,'my-select'是select的`name`.可能很清楚,但我一直在尝试使用类标签:P (8认同)
  • `assert page.has_select?('my-select', selected: 'Option 2')` 如果是 minitest 而不是 rspec (2认同)

Bra*_*don 41

find_field('restrictions__rating_movies').find('option[selected]').text
Run Code Online (Sandbox Code Playgroud)

  • 如果选项的选择是在javascript中完成的,则find('option [selected]')可能无效.在这种情况下,有可能使用选择的水豚?像这样的方法:find('#restrictions_rating_movies').find(:xpath,"./ option [contains(.,'Starwars')]"..选中? (6认同)
  • @AshBlue这只是确保'所需的字符串'包含在下拉列表的选项中,而不是实际选中它. (2认同)
  • 我接受了@ LesNightingill的想法,最后做了:`find("#select_name option [value ='something']").应该be_selected` (2认同)

Vij*_*han 13

获取所选选项值的非常简单的方法是:

find("#restrictions__rating_movies").value
Run Code Online (Sandbox Code Playgroud)

这将返回所选的选择选项值.