В поле выбора выбора есть определенные опции с Capybara
Как использовать Capybara для проверки того, что в поле выбора есть определенные значения, перечисленные в качестве параметров?
Он должен быть совместим с Selenium...
Это HTML, который у меня есть:
<select id="cars">
<option></option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
Это то, что я хочу сделать:
Then the "cars" field should contain the option "audi"
Ответы
Ответ 1
Попробуйте использовать capybara rspec matcher has_select (locator, options = {}) вместо:
#Find a select box by (label) name or id and assert the given text is selected
Then /^"([^"]*)" should be selected for "([^"]*)"$/ do |selected_text, dropdown|
expect(page).to have_select(dropdown, :selected => selected_text)
end
#Find a select box by (label) name or id and assert the expected option is present
Then /^"([^"]*)" should contain "([^"]*)"$/ do |dropdown, text|
expect(page).to have_select(dropdown, :options => [text])
end
Ответ 2
Для чего это стоит, я бы назвал это раскрывающимся меню, а не полем, поэтому напишу:
Then the "cars" drop-down should contain the option "audi"
Чтобы ответить на ваш вопрос, здесь RSpec-код для реализации этого (непроверенного):
Then /^the "([^"]*)" drop-down should contain the option "([^"]*)"$/ do |id, value|
page.should have_xpath "//select[@id = '#{id}']/option[@value = '#{value}']"
end
Если вы хотите проверить текст опции вместо атрибута value (что может сделать для более читаемых сценариев), вы можете написать:
page.should have_xpath "//select[@id = '#{id}']/option[text() = '#{value}']"
Ответ 3
Ну, так как я был вокруг и увидел вопрос (и сегодня тестировал) решил отправить свой путь:
within("select#cars") do
%w(volvo saab mercedes audi).each do |option|
expect(find("option[value=#{option}]").text).to eq(option.capitalize)
end
end
Ответ 4
Как альтернативное решение, и поскольку я не знаком с xpaths, я сделал это, чтобы решить аналогичную проблему:
page.all('select#cars option').map(&:value).should == %w(volvo saab mercedes audi)
Это довольно просто, но мне потребовалось некоторое время, чтобы понять.
Ответ 5
Then I should see "audi" within "#cars"
должен сделать трюк