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?

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"

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]


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"

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

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,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.