2012-05-08 8 views
129

Mam pole o właściwej etykiety, które można wypełnić z kapibary bez problemu:Jak mogę sprawdzić, czy pole formularza jest poprawnie wypełnione za pomocą kapibara?

fill_in 'Your name', with: 'John' 

Chciałbym sprawdzić wartość przyjmuje się przed napełnieniem go i nie mogę zrozumieć.

Jeśli dodać po fill_in następujący wiersz:

find_field('Your name').should have_content('John') 

Ten test nie powiedzie się, chociaż nadzienie tuż przed pracował jako I zostały zweryfikowane przez zapisania strony.

Czego mi brakuje?

Odpowiedz

159

Można użyć xpath kwerendy, by sprawdzić, czy jest to element input z określonej wartości (np 'John'):

expect(page).to have_xpath("//input[@value='John']") 

Zobacz http://www.w3schools.com/xpath/xpath_syntax.asp aby uzyskać więcej informacji.

bo może ładniejszy sposób:

expect(find_field('Your name').value).to eq 'John' 

EDIT: (! Powinien być) Dziś pewnie bym wykorzystać have_selector

expect(page).to have_selector("input[value='John']") 

Jeśli używasz wzór strona obiektu

class MyPage < SitePrism::Page 
    element :my_field, "input#my_id" 

    def has_secret_value?(value) 
    my_field.value == value 
    end 
end 

my_page = MyPage.new 

expect(my_page).to have_secret_value "foo" 
+0

Ah, brakowało mi ".value" bit. Dzięki! –

+0

Miałem ten sam problem, ale z div, a nie pole formularza. Dla każdego, kto ma ten sam problem, użyj find_by_id(). Text zamiast find_field(). Value. Zajęło mi * wiek * odkrycie, że ta wartość działała tylko na polach formularzy ... –

+8

Problem z tym ostatnim sposobem polega na tym, że nie używa on cyklu odpytywania Capybary i dlatego natychmiast zawiedzie, jeśli pole jest ustawione przez dłuższy kod JS. Pierwszy sposób jest preferowany, chyba że próbujesz tego na statycznie wygenerowanej formie. – fqxp

258

Kolejne dobre rozwiązanie to:

page.should have_field('Your name', with: 'John') 

lub

expect(page).to have_field('Your name', with: 'John') 

odpowiednio.

Zobacz także reference.

Uwaga: w przypadku wyłączonych danych wejściowych należy dodać opcję disabled: true.

+15

Znacznie lepiej niż wybrana odpowiedź! – Agent47DarkSoul

+3

Wciąż wolę wybraną odpowiedź, ponieważ komunikat o błędzie pokazuje oczekiwane i rzeczywiste ciągi. Daje to niepomocny błąd "oczekiwane pole" moje pole "zwrócić coś". Ale ten zdecydowanie lepiej czyta i lepiej podąża za API strony matcher. Rozrzut dookoła !!! – mraaroncruz

+0

To działało dla mnie podczas używania pliku typeahead.js w celu zweryfikowania zawartości pola, podczas gdy interpreter xpath nie. –

1

Jeśli konkretnie chcesz przetestować dla zastępczego, należy:

page.should have_field("some_field_name", placeholder: "Some Placeholder") 

czyli

expect(page).to have_field("some_field_name", placeholder: "Some Placeholder") 

Jeśli chcesz przetestować wartości wprowadzone przez użytkownika:

page.should have_field("some_field_name", with: "Some Entered Value")