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

В поле выбора выбора есть определенные опции с 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"
4b9b3361

Ответ 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"

должен сделать трюк