Capybara-webkit无法处理与bootstrap glyphicon

时间:2016-04-13 23:23:30

标签: ruby-on-rails twitter-bootstrap rspec capybara-webkit

我有一个链接:

link_to %q(<span class='glyphicon glyphicon-trash'/>).html_safe, feed_item, data: {confirm: 'Are you sure?',toggle: 'tooltip'}, method: :delete, title: 'Delete', id: 'delete_post'

以及以下功能规范代码

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,例如&#39;删除&#39;,测试工作。 这似乎与Github上未解析的issue有关,可能与CSS覆盖可点击的html元素有关。但是,我无法理解在这种情况下如何发生这种重叠或如何纠正它。

将图标用于常见任务(例如编辑&#34;或者&#39;删除&#39;所以找到解决方案会很好。

如何解决此问题?

4 个答案:

答案 0 :(得分:3)

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

你可以做的就是使用它:

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

而不是:

click_link 'delete_post'

答案 1 :(得分:2)

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

  def trash_icon
    if Rails.env.test?
      'proxy_for_trash_icon'
    else
      "<span class='glyphicon glyphicon-trash'/>".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

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

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

答案 2 :(得分:0)

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

这样的事情:

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

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

答案 3 :(得分:-1)

使用Qt 5.5.1构建capybara-webkit,&lt; 5.3左右,其中伪元素没有为链接提供任何大小,因此无处可点击