Как проверить, существует ли кнопка отправки в capybara?

Я хочу провести тест в rspec для существования кнопки отправки. Я также использую capybara.

Я пробовал:

should have_tag("input","Submit button")

и

should have_content("Submit, button")

но он либо вызывает исключение, либо дает ложные срабатывания.

Ответы

Ответ 1

Все это хорошие предложения, но если вы хотите подтвердить, что это кнопка и что она имеет правильное значение (для отображения), вы должны быть немного более подробными:

page.should have_selector("input[type=submit][value='Press Me']")

Я не знаю о существующем совпадении, который делает это. Здесь пользовательский RSpec2-матчи я написал:

RSpec::Matchers.define :have_submit_button do |value|
  match do |actual|
    actual.should have_selector("input[type=submit][value='#{value}']")
  end
end

Здесь версия RSpec3 (любезно предоставлена ​​@zwippie):

RSpec::Matchers.define :have_submit_button do |value|
  match do |actual|
    expect(actual).to have_selector("input[type=submit][value='#{value}']")
  end
end

Я держу его в spec/support/matchers/request_matchers.rb с другими моими специальными помощниками. RSpec выбирает его автоматически. Поскольку это сопоставление RSpec (а не поиск Capybara), он будет работать как в спецификациях характеристик (Capybara), так и в представлении (RSpec без Capybara).

Использование спецификаций функций:

page.should have_submit_button("Save Me")

Просмотр использования спецификации (после вызова render):

rendered.should have_submit_button("Save Me")

Обратите внимание, что если вы находитесь в спецификации запроса Capybara и хотите взаимодействовать с кнопкой отправки, это намного проще:

click_button "Save Me"

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

Ответ 2

Существует встроенный макет has_button?.

Используя RSpec, вы можете иметь такое утверждение, как

page.should have_button('Submit button')

Или с новым синтаксисом RSpec 3:

expect(page).to have_button('Submit button')

Ответ 3

У меня есть один (используется в огурце):

Then /^I should see "([^"]*)" button/ do |name|
  should have_button name
end

В отрицательном использовании: has_no_button

Ответ 4

если ваш HTML-надпись - это что-то вроде:

<input type="submit"></input>

Затем вы можете сделать следующее в capybara:

page.should have_selector('input[type=submit]')

Ответ 5

У меня есть что-то вроде:

page.find("#submitButton").visible?

Ответ 6

Попробуйте

it { should have_xpath("//input[@value='Sign up']") }

Ответ 7

Try:

it { should have_selector('input', value: "Submit") }

ОБНОВЛЕНИЕ: Я подозреваю, что в некоторых случаях этот ответ может работать не так, как хотелось бы. Когда я использую это для проверки значения в других тегах ввода, он, кажется, проходит независимо от того, что это значение.