2013-03-21 13 views
10

mi piace mantenere le cose DRY, è per questo che voglio avere il seguente in uno dei miei passi:Verificando un elemento esiste senza perdere tempo in Capybara

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

Ciò significa, che cercherà un certo elemento, e se esiste, farà clic su di esso. In caso contrario, non perderò tempo (il mio tempo di attesa predefinito è 20 secondi, che verrà utilizzato se inseriscoanziché first.

Il problema principale è che non voglio perdere tempo quando controllo per un certo elemento in questo caso, ma mi chiedo anche se questo è un buon approccio.

risposta

19

vedo il problema che il codice fa inutili seconda query al browser (si dispone già di first(:css, "#blabla") quindi nessun bisogno di fare find_by_id(blabla))

Vi propongo di trovare elemento utilizzando una query:

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

Si noti che non vi è alcun tempo perdente qui come first non blocca.

Tuttavia, first non controlla che non ci siano altri elementi nella pagina. Puoi aggiungere :maximum per verificarlo:

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

La risposta aggiornata è molto utile. Grazie! Ho cambiato il mio codice di conseguenza. – TrashyMcTrash

Problemi correlati