Come usare fill_in con find in Capybara (se possibile)


90

Vorrei fare quanto segue ma non posso a causa della natura di fill_in che si aspetta un localizzatore come primo argomento.

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

Ho anche provato a farlo

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

ma non ci sono metodi che restituiscono dati per identificare l'elemento da riempire.

Qualche idea sul modo migliore per trovare un campo tramite un'espressione regolare da utilizzare con fill_in?

Risposte:


160

Andare dalla memoria quindi potrebbe non essere corretto al 100%, ma penso che se hai un riferimento all'elemento stesso useresti setinvece di fill_in:

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

Tuttavia, per il tuo esempio specifico, fill_indovresti essere in grado di trovare l'elemento come sai che è ID:

fill_in 'donation_pledge_hundreds', with: "10"

Brav'uomo, è quello. Quel particolare campo viene utilizzato in contesti diversi (autenticato / non autenticato) e quindi accetta un ID di campo diverso. donation_pledge_hundreds è la parte comune dell'id del campo quindi confrontando la fine del nome del campo $ =
formiche

8
Fai attenzione a usare "set" piuttosto che gli altri metodi incorporati, poiché non attiva eventi dopo aver modificato il valore.
Dan Caddigan

@DanCaddigan ed è per questo che sembra f3ck3d up: / come fai allora?
Ben

È possibile utilizzare find(:css, "...").set("10").send_keys(:return)per premere Invio in seguito. Attiva gli eventi rilevanti. Non l'ho testato ma puoi anche farlo se ti piace find(:css, "...").set("10").trigger(:blur).
gondalez

5

Invece di un metodo, puoi usare le parentesi per restituire :nameo :id, ad esempio, element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" lo stesso approccio può essere usato con select- select my_type, from: find('select[name$="[type]"]')[:name]


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

Vale la pena notare che puoi incatenare le tue scoperte.

@modal = find(".modal")
@modal.find('input[name=foo]').set "bar"

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

Le risposte solo al codice sono scoraggiate. Si prega di aggiungere qualche spiegazione su come questo risolve il problema o su come questo differisce dalle risposte esistenti. Dalla recensione
Nick

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.