it-swarm.com.de

Wie kann ich mit capybara überprüfen, ob ein Formularfeld korrekt ausgefüllt ist?

Ich habe ein Feld mit einem richtigen Etikett, das ich problemlos mit Capybara ausfüllen kann:

fill_in 'Your name', with: 'John'

Ich möchte den Wert überprüfen, bevor er sie ausfüllt, und ich kann ihn nicht herausfinden.

Wenn ich nach dem fill_in folgende Zeile hinzufüge:

find_field('Your name').should have_content('John')

Dieser Test schlägt fehl, obwohl die Füllung kurz davor funktioniert hat, nachdem ich die Seite gespeichert habe.

Was vermisse ich?

134

Sie können eine xpath-Abfrage verwenden, um zu prüfen, ob es ein input-Element mit einem bestimmten Wert gibt (z. B. 'John'):

expect(page).to have_xpath("//input[@value='John']")

Siehe http://www.w3schools.com/xpath/xpath_syntax.asp für weitere Informationen.

Für einen vielleicht schöneren Weg:

expect(find_field('Your name').value).to eq 'John'

EDIT: Heutzutage würde ich wahrscheinlich have_selector verwenden

expect(page).to have_selector("input[value='John']")

Wenn Sie das Seitenobjektmuster verwenden (sollten Sie sein!)

class MyPage < SitePrism::Page
  element :my_field, "input#my_id"

  def has_secret_value?(value)
    my_field.value == value
  end
end

my_page = MyPage.new

expect(my_page).to have_secret_value "foo"
169
DVG

Eine andere hübsche Lösung wäre:

page.should have_field('Your name', with: 'John')

oder

expect(page).to have_field('Your name', with: 'John')

beziehungsweise.

Siehe auch reference .

Note: Für deaktivierte Eingaben müssen Sie die Option disabled: true hinzufügen.

275
fqxp

Wenn Sie einen Platzhalter speziell testen möchten, verwenden Sie Folgendes:

page.should have_field("some_field_name", placeholder: "Some Placeholder")

oder:

expect(page).to have_field("some_field_name", placeholder: "Some Placeholder")

Wenn Sie den vom Benutzer eingegebenen Wert testen möchten:

page.should have_field("some_field_name", with: "Some Entered Value")
1
Jim Stewart

Ich fragte mich, wie ich etwas anderes machen sollte: Ich wollte testen, ob das Feld einen etwas - Wert hatte (während er Capybaras Fähigkeit, den Matcher erneut zu testen, bis er passt ) verwendet. Es stellt sich heraus, dass es möglich ist, einen "Filterblock" dafür zu verwenden:

expect(page).to have_field("field_name") { |field|
  field.value.present?
}
0
jonleighton