Frage Wie kann ich testen, ob ein Absenden-Button in Capybara existiert?


Ich möchte einen Test in rspec für die Existenz einer Übermittlungsschaltfläche haben. Ich benutze auch Capybara.

Ich habe versucht:

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

und

should have_content("Submit, button")

aber es löst entweder eine Ausnahme aus oder gibt falsche positive Ergebnisse.


16
2017-09-24 21:59


Ursprung


Antworten:


Das sind alles gute Vorschläge, aber wenn Sie bestätigen wollen, dass es eine Schaltfläche ist und dass sie den richtigen Wert hat (zur Anzeige), müssen Sie ein wenig detaillierter sein:

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

Ich kenne keinen existierenden Matcher, der das tut. Hier ist ein benutzerdefinierter RSpec2 Matcher, den ich geschrieben habe:

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

Hier ist die RSpec3-Version (mit freundlicher Genehmigung @zwippie):

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

Ich behalte es spec/support/matchers/request_matchers.rb mit meinen anderen benutzerdefinierten Matcher. RSpec nimmt es automatisch auf. Da es sich um einen RSpec-Matcher (und nicht um einen Capybara-Finder) handelt, funktioniert es sowohl in Feature-Spezifikationen (Capybara) als auch in View-Specs (RSpec ohne Capybara).

Feature-Spezifikation:

page.should have_submit_button("Save Me")

Spezifikationsverwendung anzeigen (nach dem Aufruf render):

rendered.should have_submit_button("Save Me")

Wenn Sie in einer Capybara-Anforderungsspezifikation sind und mit einer Übermittlungsschaltfläche interagieren möchten, ist das viel einfacher:

click_button "Save Me"

Es gibt keine Garantie dafür, dass es sich tatsächlich um eine Übermittlungsschaltfläche handelt, aber Ihre Feature-Spezifikationen sollten nur das Verhalten testen und sich nicht um diese Detailebene kümmern.


33
2018-03-17 17:11



Es gibt einen eingebauten Matcher has_button?.

Mit RSpec können Sie eine Aussage wie

page.should have_button('Submit button')

Oder mit neuer RSpec 3-Syntax:

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

14
2018-02-17 09:29



Ich habe einen (in Gurke):

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

Bei negativer Verwendung: have_no_button


2
2017-12-30 20:57



wenn Ihre HTML-Markierung nur etwas ist wie:

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

Dann kannst du folgendes in Capybara machen:

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

1
2017-09-27 20:52



Ich habe etwas wie:

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

0
2017-09-24 22:14



Versuche dies

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

0
2018-04-03 13:17



Versuchen:

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

UPDATE: Ich vermute, dass diese Antwort in manchen Fällen nicht wie gewünscht funktioniert. Wenn ich dies verwende, um den Wert in anderen Eingabe-Tags zu testen, scheint es zu passieren, egal was der Wert ist.


-1
2017-09-24 22:43