Подтвердить что ты не робот

Получить выбранное значение выпадающего списка для тестирования capybara

Мне нужно написать тесты для веб-сайта. Я пытаюсь получить выбранное значение раскрывающегося списка. Пока я могу получить содержимое выпадающего меню, выполнив

find_field('restrictions__rating_movies').text

возвращает - Не разрешать фильмы г PG M R13 R15 R16 R18 р 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>

в этом случае показано, что мне нужно получить значение "Разрешить все фильмы", я пробовал много разных комбинаций из двух приведенных выше примеров.

4b9b3361

Ответ 1

find_field('restrictions__rating_movies').find('option[selected]').text

Ответ 2

Там have_select, если вы используете Capybara с Rspec:

expect(page).to have_select('my-select', selected: 'Option 2')

Ответ 3

Очень простой способ получить значение выбранной опции:

find("#restrictions__rating_movies").value

Это вернет выбранное значение опции выбора.

Ответ 4

Если вам нужно только утверждать, что поле выбрано с заданной опцией, прямой ответ

#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

Но название вашего вопроса "Получить значение выбора для раскрывающегося списка" . И у меня возникла аналогичная проблема, когда я хотел бы не только утверждать выбор, но и извлекать текст и значение выбранного поля. Я не нашел прямого пути к 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?. Он вернет массив.

Этот ответ не полагается на трюк 'option [selected]' как предыдущий, поэтому он работает, даже если выбор выполняется Javascript (что было причиной того, что предыдущие ответы не работали для меня на все).

Протестировано:

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

Ответ 5

Что-то вроде этой работы?

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