Verwendung von fill_in mit find in Capybara (falls möglich)

90

Ich möchte Folgendes tun, kann dies jedoch nicht, da fill_in einen Locator als erstes Argument erwartet.

find(:css, "input[id$='donation_pledge_hundreds']").fill_in :with => "10"

Ich habe es auch versucht

element = find(:css, "input[id$='donation_pledge_hundreds']")   
fill_in element.<method> , :with => "10"

Es gibt jedoch keine Methoden, die Daten zurückgeben, um das zu füllende Element zu identifizieren.

Irgendwelche Ideen, wie man ein Feld über einen regulären Ausdruck für die Verwendung mit fill_in am besten findet?

Ameisen
quelle

Antworten:

160

Das Verlassen des Speichers ist möglicherweise nicht 100% korrekt, aber ich denke, wenn Sie einen Verweis auf das Element selbst haben, würden Sie setanstelle von fill_in:

find(:css, "input[id$='donation_pledge_hundreds']").set("10")

Für Ihr spezielles Beispiel fill_insollte es jedoch möglich sein, das Element so zu finden, wie Sie es kennen:

fill_in 'donation_pledge_hundreds', with: "10"
Jon M.
quelle
Guter Mann, das ist der eine. Dieses bestimmte Feld wird in verschiedenen Kontexten verwendet (authentifiziert / nicht authentifiziert) und verwendet daher eine andere Feld-ID. Donation_pledge_hundreds ist der gemeinsame Teil der Feld-ID und vergleicht daher das Ende des Feldnamens $ =
Ameisen
8
Seien Sie vorsichtig, wenn Sie 'set' anstelle der anderen integrierten Methoden verwenden, da nach dem Ändern des Werts keine Ereignisse ausgelöst werden.
Dan Caddigan
@DanCaddigan und deshalb scheint es f3ck3d up: / wie geht es dir dann?
Ben
Sie können anschließend die Eingabetaste find(:css, "...").set("10").send_keys(:return)drücken. Es löst die relevanten Ereignisse aus. Ich habe es nicht getestet, aber du kannst es auch, find(:css, "...").set("10").trigger(:blur)wenn das dein Ding ist.
Gondalez
5

Anstelle einer Methode können Sie Klammern verwenden, um zurückzugeben, :nameoder :idz. B. kann element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" der gleiche Ansatz mit select- verwendet werden select my_type, from: find('select[name$="[type]"]')[:name]

bhfailor
quelle
3
find("input[id$='donation_pledge_hundreds']").set "10"

Es ist erwähnenswert, dass Sie Ihre Funde verketten können.

@modal = find(".modal")
@modal.find('input[name=foo]').set "bar"
Nate
quelle
2
element = find(:css, "input[id$='donation_pledge_hundreds']")   
element.fill_in with: "10"
aki
quelle
Nur-Code-Antworten werden nicht empfohlen. Bitte fügen Sie eine Erklärung hinzu, wie dies das Problem löst oder wie sich dies von den vorhandenen Antworten unterscheidet. Aus dem Rückblick
Nick
0
fill_in <$id>, :with => 'text you want to fill in'
Chints Vadgama
quelle