Cómo usar fill_in con find en Capybara (si es posible)

90

Me gustaría hacer lo siguiente, pero no puedo debido a la naturaleza de fill_in esperando un localizador como primer argumento.

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

También he intentado hacer

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

pero no hay métodos que devuelvan ningún dato para identificar el elemento a llenar_en.

¿Alguna idea de la mejor manera de encontrar un campo a través de una expresión regular para usar con fill_in?

hormigas
fuente

Respuestas:

160

Pasar de la memoria, por lo que puede no ser 100% correcto, pero creo que si tiene una referencia al elemento en sí, usaría en setlugar de fill_in:

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

Sin embargo, para su ejemplo específico, fill_indebería poder encontrar el elemento como sabe su ID:

fill_in 'donation_pledge_hundreds', with: "10"
Jon M
fuente
Buen hombre, ese es el indicado. Ese campo en particular se usa en diferentes contextos (autenticado / no autenticado) y, por lo tanto, toma una identificación de campo diferente. donation_pledge_hundreds es la parte común de la identificación del campo, por lo tanto, se compara el final del nombre del campo $ =
ants
8
Tenga cuidado al usar 'set' en lugar de los otros métodos integrados, ya que no activa eventos después de cambiar el valor.
Dan Caddigan
@DanCaddigan y por eso parece jodido: / ¿cómo estás entonces?
Ben
Puede usar find(:css, "...").set("10").send_keys(:return)para presionar regresar después. Activa los eventos relevantes. No lo he probado pero tú también puedes find(:css, "...").set("10").trigger(:blur)si eso es lo tuyo.
gondalez
5

En lugar de un método, puede usar corchetes para regresar :nameo :id, por ejemplo, element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" el mismo enfoque se puede usar con select- select my_type, from: find('select[name$="[type]"]')[:name]

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

Vale la pena señalar que puede encadenar sus hallazgos.

@modal = find(".modal")
@modal.find('input[name=foo]').set "bar"
Nate
fuente
2
element = find(:css, "input[id$='donation_pledge_hundreds']")   
element.fill_in with: "10"
aki
fuente
Se desaconsejan las respuestas de solo código. Agregue alguna explicación sobre cómo esto resuelve el problema o en qué se diferencia de las respuestas existentes. De la opinión
Nick
0
fill_in <$id>, :with => 'text you want to fill in'
Chints Vadgama
fuente