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?

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"

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]


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"

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.