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?
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"
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.
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")
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?
}