2013-03-21 13 views
10

lubię trzymać rzeczy DRY, dlatego chcę mieć następujące w jednej z moich kroków:Sprawdzanie, czy element istnieje, nie tracąc czasu w Kapibara

if first(:css, "#blabla") != nil 
    find_by_id(blabla).click 
end 
find_by_id(....) 
.... 

Oznacza to, że będzie szukać pewnego elementu, a jeśli istnieje, kliknie na niego. Jeśli nie, nie będę tracić czasu (mój domyślny czas oczekiwania wynosi 20 sekund, które będą stosowane, jeśli kładę find zamiast first tam.

Głównym problemem jest to, że nie chcę tracić czasu podczas sprawdzania pewien element w tym przypadku, ale jestem też zastanawiać, czy jest to dobre podejście.

Odpowiedz

19

widzę problemu, że kod ma niepotrzebnego drugą kwerendę do przeglądarki (masz już first(:css, "#blabla") więc nie trzeba robić find_by_id(blabla))

Proponuję znaleźć element za pomocą jednego zapytania:

el = first('#blabla') 
el.click unless el.nil? 

Należy pamiętać, że nie ma tu czasu utraty, ponieważ first nie blokuje.

Jednak, first nie sprawdza, czy nie ma innych elementów na stronie. Możesz go dodać: :maximum, aby to sprawdzić:

el = first('#blabla', maximum: 1) 
el.click unless el.nil? 
+0

Zaktualizowana odpowiedź jest bardzo pomocna. Dziękuję Ci! Zmieniłem odpowiednio swój kod. – TrashyMcTrash

Powiązane problemy