2012-10-15 11 views
7

Mam stronę w mojej witrynie, którą próbuję przetestować, co wymaga, aby użytkownik spędził co najmniej pięć sekund na stronie, zanim przejdzie dalej. Czy jest jakiś sposób na Capybara, aby moje testy Cucumber zatrzymały się na tej stronie i poczekały pięć sekund, zanim przejdę do następnego kroku, który opisuję?Funkcja uśpienia w kapibarze/ogórku?

Odpowiedz

20

mam to w definicji mój krok:

Given /^I wait for (\d+) seconds?$/ do |n| 
    sleep(n.to_i) 
end 

W swojej funkcji:

Given I am on the whatever page 
And I wait for 5 seconds 
And I follow "A Link" 
# etc... 
+2

Proponowałbym, oprócz ogólnego etapu snu, dodanie do określonego miejsca określonego snu, do którego jest przeznaczone. Na przykład: jeśli krok brzmiał "Biorąc pod uwagę, że jestem na stronie oczekiwania", w tym kroku @ blim8183 powinien spać przez 5 sekund. Następnie można zastosować ten bardziej skoncentrowany krok. – MrDanA

+0

To działa idealnie. Dzięki! – blim8183

+0

Jeśli umieścisz ten ogólny krok uśpienia w swoim pliku kroków, możesz wtedy [wywołać go z innych kroków] (https://github.com/cucumber/cucumber/wiki/Calling-Steps-from-Step-Definitions) z ' krok "Czekam na 5 sekund" '. Używam tego, aby dodać niewielkie opóźnienia w wielu innych krokach. – Jazz

1

Byłoby również wspaniale określić dynamicznie jednostkę czasu jak ten:

Given /^I wait for (\d+) (second|minute|hour)s?$/ do |n, unit| 
    sleep(eval("#{n.to_i}.#{unit}")) 
end 
+0

Nigdy nie używaj 'eval'. Prosisz tylko o kłopoty. 'sleep (n.to_i.send (unit))' –