Rspec / Capybara - 如何在跨度内定位数据目标属性

时间:2015-08-20 19:13:27

标签: ruby-on-rails ruby-on-rails-4 rspec capybara

在我的Rails4 / rspec应用程序中,我需要男性Capybara点击没有正式的#34;链接" ,使用数据目标属性。

HTML

<div class="info-zone">
   <span data-target="#myInfoZone1" class="City" data-toggle="modal">  
   </span>
</div>

我目前使用capyabar的尝试失败

describe "modal loads with the right content" do
      it "has right text" do
        visit actual_page_path(:id => @deal.id) 
        find("span[data-target='#myInfoZone1']").click
      end

我目前收到此错误

Capybara::ElementNotFound:
       Unable to find css "span[data-target='#myInfoZone1']"

我怎样才能制作水豚&#34;找到&#34;并单击区域?

感谢您的帮助

修改

我发现为什么水豚没有找到它!

有一个我无法理解的原因,那就是capybara找到的html输出代码

<!-- city zone -->
<div id="city-zone">

  <!--
    We gather here the various types of <spans> and load it via javascript
we append it to the the div id=city-zone
  -->
</div>

我正在使用javascript加载这个div。所以当我加载“页面来源”时我看到上面的内容

但是当我使用chrome dev工具时,我看到了:

<!-- city zone -->
<div id="city-zone">

   <div class="info-zone">
       <!--
    We gather here the various types of <spans> and load it via javascript
we append it to the the div id=city-zone
  -->
   <span data-target="#myInfoZone1" class="City" data-toggle="modal">  
       </span>
    </div>
</div>

所以我猜Capybara看到的东西和我在加载页面源时看到的一样:没有。 为什么我追加的javascript没有出现在html代码源中?

如何处理水豚工作

1 个答案:

答案 0 :(得分:1)

Capybara的默认驱动程序仅测试后端应用程序服务器呈现的html。如果你想用前端javascript测试页面,你应该在Capybara上使用支持javascript的驱动程序。

幸运的是,thoughtbot的人们为Capybara-webkit做了一个Capybara扩展。你可以轻松地将它安装在你的Gemfile中。按照here说明安装gem。

最后,安装后,您可以在功能/方案中添加 js:true ,在功能规范中启用javascript测试,如下所示:

RSpec.feature "test my new feature", js: true do
  # my test
end