2015-09-14 50 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

最小的工作完美的问题,首先是不等待元素出现,也不等到你给它这个属性 –