Capybara-webkit无法处理与bootstrap glyphicon的链接

我有一个链接:

link_to %q().html_safe, feed_item, data: {confirm: 'Are you sure?',toggle: 'tooltip'}, method: :delete, title: 'Delete', id: 'delete_post' 

和以下function规范代码

 page.accept_confirm do click_link 'delete_post' end 

我收到以下错误

 Capybara::Webkit::ClickFailed: Failed to find position for element /html/body/div[@id='wrapper']/div[@id='page-content-wrapper']/div/div[@id='main']/div[@id='main_content']/div[4]/div/div/div[1]/h3/div/a[@id='delete_post'] 

如果我用一些文本(例如“删除”)用glyphicon替换span,则测试有效。 这似乎与Github上未解决的问题有关,可能与CSS覆盖可点击的html元素有关。 但是,我无法理解在这种情况下如何发生这种重叠或如何纠正它。

将图标用于“编辑”或“删除”等常见任务已成为一种常见做法,因此最好找到解决方案。

我该如何解决这个问题?

虽然Obromios的回答可行,但我认为改变渲染图标的方式并不是一个好主意。 特别是因为你需要添加if Rails.env.test? 每个图标渲染,以使测试工作。

你能做的就是用这个:

 find('.glyphicon.glyphicon-trash').trigger('click') 

而不是这个:

 click_link 'delete_post' 

似乎人们通过修改测试来使用javascript单击元素或更改上层项目的不透明度来解决此问题。 相反,我选择了以下内容,这更多地依赖于railsfunction。 我写了一个trash_icon助手,如下所示:

  def trash_icon if Rails.env.test? 'proxy_for_trash_icon' else "".html_safe end end 

并修改我的链接:

 link_to trash_icon, feed_item, data: {confirm: 'Are you sure?',toggle: 'tooltip'}, method: :delete, title: 'Delete', id: 'delete_post' 

并测试:

 page.accept_confirm do click_link 'proxy_for_trash_icon' end 

除了生产系统中使用的确切文本/图标外,它还会测试所有内容。

尽管如此,希望有人会提出一个不是解决方法的解决方案。

除了@ ariel_scherman的答案之外,你不会忘记将js: true添加到测试示例的开头。

像这样的东西:

 feature "delete the glyphicon", js: true do ............ end 

这样可以启用您的javascript驱动程序

使用Qt 5.5.1构建你的capybara-webkit,在<5.3左右存在一个问题,其中伪元素没有为链接提供任何大小,所以无处点击它