我有一个测试,在页面上呈现两个相同的元素。我理解错误的问题是什么,但我不确定如何修复它?这是我的测试:
it "deletes the correct snitch" do
user = login_user
snitch = create(:snitch, :healthy, owner: user.accounts.first)
snitch2 = create(:snitch, :healthy, owner: user.accounts.first)
visit root_path
delete = page.find(".icon-delete")
first(delete).click
expect(page).to have_content("Please confirm this delete.")
end
Managing snitches deleting a snitch from the index page deletes the correct snitch
Failure/Error: delete = page.find(".icon-delete")
Capybara::Ambiguous:
Ambiguous match, found 2 elements matching css ".icon-delete"
如何选择页面上的一个图标删除?
答案 0 :(得分:12)
我建议将其包装在更具体的取景器中,如下所示:
within find('#my_unique_id') do
find(".icon-delete").click
end
然而,这将要求您在父元素上具有id。如果你没有这个,你可以选择在该页面上选择第一个的简单路线,然后点击它:
first(".icon-delete").click
答案 1 :(得分:4)
首先使用与find(不是元素)相同的参数,所以只需点击你要做的第一个匹配元素
page.first('.icon-delete').click
但是要考虑到一个区别,因为nil是一个有效的响应,它首先赢了(默认情况下)等待匹配元素出现。如果你确实需要等待元素,你只需要传递一个计数选项
page.first('.icon-delete', minimum: 1).click
答案 2 :(得分:0)
click_on "链接文本", :match => :first