如何组合搜索点击墨水Cypabara Rspec

时间:2017-01-05 04:44:23

标签: rspec hyperlink click capybara

describe 'Destroy Student Record' do
        it 'should allow to Delete My student', js: true do
          expect {
            find('.icon-delete',"a[href ='/room/grade3/#{@student.id}']").click
            page.find('.btn.delete', text: 'Sure').click
          }.to change(Student, :count).by(-1)
        end
      end

但问题是,当它们是2条记录时,它显示.icon-delete是不明确的,并且href对于删除和查看详细信息也是相同的,所以对于href,它也显示不明确。 我该如何进行组合搜索

1 个答案:

答案 0 :(得分:2)

使用HTML

<a href="/room/grade3/10036" class="btn" title="Delete">
  <i class="icon-delete"></i>
</a>

有多种方式可以点击 - click_link将匹配链接的ID,文本或标题,以便只需点击您可以执行的链接

click_link('Delete', href: "/room/grade3/#{@student.id}")

如果您需要专门点击&lt; i&gt;你可以做任何一个

的元素
find_link('Delete', href: "/room/grade3/#{@student.id}").find('.icon-delete').click
find("a[href ='/room/grade3/#{@student.id}'] i.icon-delete").click

注意:即使使用这些修补程序,您的测试也可能会失败。那是因为您正在使用change匹配器,并且您的阻止没有做任何事情以确保在更改匹配器再次检查学生计数之前操作已完成。这是因为当使用任何JS支持驱动程序click时只需单击按钮,它就不知道要等待的任何副作用,并在应用程序启动时返回测试并开始处理任何行为点击触发器。要解决这个问题,你的测试需要像

那样
expect {
  ... Do whatever clicking of link/button ...
  expect(page).to have_text("Student deleted") # whatever message is shown once the student is actually deleted or an assertion for other visible change
}.to change(Student, :count).by(-1)

这样代码会延迟,直到学生被实际删除,change匹配器可以再次获得学生计数。