Jak używać fill_in z Find in Kapibara (jeśli to możliwe)

90

Chciałbym wykonać następujące czynności, ale nie mogę ze względu na naturę funkcji fill_in oczekującej lokalizatora jako pierwszego argumentu.

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

Ja też próbowałem

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

ale nie ma metod, które zwracają jakiekolwiek dane identyfikujące element do fill_in.

Jakieś pomysły dotyczące najlepszego sposobu znajdowania pola za pomocą wyrażenia regularnego do użycia z fill_in?

mrówki
źródło

Odpowiedzi:

160

Przechodząc z pamięci, więc może nie być w 100% poprawne, ale myślę, że jeśli masz odniesienie do samego elementu, użyjesz setzamiast fill_in:

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

Jednak w twoim konkretnym przykładzie fill_inpowinieneś być w stanie znaleźć element, ponieważ znasz jego identyfikator:

fill_in 'donation_pledge_hundreds', with: "10"
Jon M
źródło
Dobry człowieku, to ten. To konkretne pole jest używane w różnych kontekstach (uwierzytelnione / nieuwierzytelnione) i dlatego przyjmuje inny identyfikator pola. donation_pledge_hundreds to wspólna część identyfikatora pola, stąd porównanie końca nazwy pola $ =
mrówki
8
Uważaj, używając opcji „set” zamiast innych wbudowanych metod, ponieważ nie wywołuje ona zdarzeń po zmianie wartości.
Dan Caddigan,
@DanCaddigan i dlatego wydaje się, że f3ck3d up: / Jak się wtedy masz?
Ben
Możesz find(:css, "...").set("10").send_keys(:return)później nacisnąć klawisz Return. Wywołuje odpowiednie zdarzenia. Nie testowałem tego, ale możesz też, find(:css, "...").set("10").trigger(:blur)jeśli to twoja sprawa.
gondalez
5

Zamiast metody możesz użyć nawiasów do zwrócenia :namelub :idnp. element = find(:css, "input[id$='donation_pledge_hundreds']") fill_in element[:name], :with => "10" To samo podejście można zastosować z select- select my_type, from: find('select[name$="[type]"]')[:name]

bhfailor
źródło
3
find("input[id$='donation_pledge_hundreds']").set "10"

Warto zauważyć, że możesz połączyć swoje znaleziska.

@modal = find(".modal")
@modal.find('input[name=foo]').set "bar"
Nate
źródło
2
element = find(:css, "input[id$='donation_pledge_hundreds']")   
element.fill_in with: "10"
aki
źródło
Tylko kod odpowiedzi są odradzane. Proszę o wyjaśnienie, jak to rozwiązuje problem lub czym różni się to od istniejących odpowiedzi. Z recenzji
Nick,
0
fill_in <$id>, :with => 'text you want to fill in'
Chints Vadgama
źródło