2015-09-14 27 views
0

我得到這個錯誤:Rails的capybaraAmbiguous比賽,發現50個元素匹配CSS

Ambiguous match, found 50 elements matching css "input[value=\"delete\"]" 

當我把下面的代碼:

find('input[value="delete"]').first.click 

在HTML文件:

<div id="deletediv-38"> 
    <form class="button_to" onsubmit="return confirm('Are you sure you want to delete?')" method="post" action="/del/38"> 
     <input type="hidden" name="_method" value="delete" /> 
     <input type="submit" name="delete-38" value="delete" /> 
    </form> 
</div> 

<div id="deletediv-39"> 
    <form class="button_to" onsubmit="return confirm('Are you sure you want to delete?')" method="post" action="/del/39"> 
     <input type="hidden" name="_method" value="delete" /> 
     <input type="submit" name="delete-39" value="delete" /> 
    </form> 
</div> 
. 
. 
. 

find('input[id="delete-38"]')它不起作用,它說沒有找到元素。

而我無法算數。 當我做

find('input[value="delete"]').count.should_be > 0 

我再次得到錯誤:

Ambiguous match, found 50 elements matching css "input[value=\"delete\"]" 

回答

3

解釋你遇到的錯誤 -

find會找到一個獨特的元素,如果沒有或者多個匹配,你會得到一個錯誤。你的find('input [id =「delete-38」]')失敗,因爲根據html,只有帶有id的元素是div,並且格式爲div的div-xx。如果你試圖找到刪除-38的名字輸入你會做

find('input[name="delete-38"]') 

至於@dimakura說,讓你使用#first的第一要素。如果你想你需要使用#all元素的計數 - 像這樣

all('input[value="delete"]').count 

如果頁面是動態變化的,你想知道的頁面一旦至少一個已經出現在伯爵那麼你可以做

all('input[value=delete]', minimum: 1).count 

它將使用水豚等行爲至少一個出現在返回前(或超時,同時等待)

+0

最小的工作完美的問題,首先是不等待元素出現,也不等到你給它這個屬性 –