Rails capybara歧义匹配,找到50个元素匹配css

Rails capybaraAmbiguous match, found 50 elements matching 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\"]"

尝试使用 this 代替:

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

解释您遇到的错误 -

find 将找到一个唯一元素,如果有 none 或多个匹配,您将得到一个错误。您的 find('input[id="delete-38"]') 失败了,因为根据 html,唯一具有 id 的元素是 div,并且具有 deletediv-xx 格式的 div。如果你试图找到名称为 delete-38 的输入,你会做

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

正如@dimakura 所述,获取您使用的第一个元素 #first. If you want a count of the elements you need to use #all - 就像这样

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

如果页面是动态变化的,并且你想知道页面上至少出现一个的次数,那么你可以这样做

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

这将使用 Capybaras 的等待行为,至少一个在返回之前出现(或者在等待时超时)