2013-08-29 10 views
31

Volevo trovare da class_name e restituire l'ultimo elemento tra tutti gli elementi.Come trovare l'ultimo elemento corrispondente in capibara?

in jQuery, siamo in grado di scrivere qualcosa di simile al di sotto, ma che non sembra funzionare in capibara

find(".delete:last") 

Se si utilizza webkit driver che si può scrivere qualcosa di simile -

find(".delete:last-child") 

In capibara, è possibile ottenere l'ultimo elemento utilizzando di seguito -

all(:css, ".delete").last 

È lì e qualsiasi alternativa a sopra?

+3

Quale driver fare usate? ''.delete: last-child'' dovrebbe funzionare con il selenio –

+0

In realtà volevo scoprire altre alternative in capibara (non specifiche del driver) –

+0

Questa non è una soluzione specifica per il guidatore. Dovrebbe funzionare in tutti i driver che supportano correttamente i selettori CSS. –

risposta

43

Ho avuto lo stesso problema e finito per usare questo metodo in Capybara 2,4

all('.delete').last 
+0

Grazie amico. Non sapevo che c'era un "tutto". Nel caso in cui qualcuno si chieda perché questo è un problema, 'find' restituisce il nodo corrispondente (buono) o genera un'eccezione se c'è più di una corrispondenza (cattiva). Quindi i pseudo selettori non funzionano. – IAmNaN

+5

FYI per i futuri lettori: tieni presente che 'tutto 'a differenza di' find' non attenderà alcun elemento; non ha modo di prevedere quanti dovrebbero esserci. È una buona idea assicurarsi di aver verificato che qualsiasi attività asincrona sulla pagina sia completa prima di utilizzarla. – tgf

+5

Funziona anche con 'within', quindi puoi fare' all'interno di tutti ('li'). Last {fill_in "Name", con: "Value"} ' – hoffmanc

0

Sulla @Sharagoz risposta e commentare @ di TGF quasi tutti (a differenza di ritrovamento) senza aspettare asincrona per finire, questa combinazione sembra a lavorare per me:

wait_for_ajax 
all('.selector').last 

Con questo aggiunto al rspec/capibara:

module RspecFeatureHelpers 
    def wait_for_ajax 
    Timeout.timeout(Capybara.default_max_wait_time) do 
     loop do 
     active = page.evaluate_script('jQuery.active') 
     break if active == 0 
     end 
    end 
    end 
end 
Problemi correlati