2013-08-29 71 views
31

我想通過class_name找到並返回所有元素中的最後一個元素。如何在水豚中找到最後的匹配元素?

jQuery中,我們可以寫類似以下,但不似乎豚

find(".delete:last") 

工作如果您使用webkit驅動,你可以寫類似 -

find(".delete:last-child") 

在水豚,你可以得到最後使用的元素以下 -

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

是它上述的任何替代方案?

+3

哪個驅動程序做你用? ''.delete:last-child''應該和硒一起工作 –

+0

其實我想知道水豚中的其他替代品(不是驅動程序特定的) –

+0

這不是驅動程序特定的解決方案。它應該適用於支持正確的CSS選擇器的所有驅動程序。 –

回答

43

我有同樣的問題,並最終使用在水豚此方法2.4

all('.delete').last 
+0

謝謝你。沒有意識到有一個'全部'。 如果有人想知道爲什麼這是一個問題,'find'返回匹配的節點(好),或者如果有多個匹配(壞),則拋出異常。所以僞選擇器不起作用。 – IAmNaN

+5

供未來讀者使用的參考文件:請記住,'find'不像'find'不會等待任何元素;它無法預測應該有多少。在使用此功能之前,確保您已驗證頁面上的任何異步活動已完成,這是個好主意。 – tgf

+5

這也適用於'within',所以你可以在'all'('li')中完成。last {fill_in「Name」,with:「Value」}' – hoffmanc

0

大廈@Sharagoz答案,所有(與FIND)@ TGF的評論不等待異步完成,這個組合似乎爲我工作:

wait_for_ajax 
all('.selector').last 

有了這個加入到rspec的/水豚:

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