模糊匹配,发现2个元素匹配css - Capybara

时间:2016-10-05 13:45:46

标签: css ruby-on-rails rspec capybara

我有一个测试,在页面上呈现两个相同的元素。我理解错误的问题是什么,但我不确定如何修复它?这是我的测试:

TEST

 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"

如何选择页面上的一个图标删除?

3 个答案:

答案 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