Ruby on rails Rspec/Capybara-如何将数据目标属性作为范围内的目标

Ruby on rails Rspec/Capybara-如何将数据目标属性作为范围内的目标,ruby-on-rails,ruby-on-rails-4,rspec,capybara,Ruby On Rails,Ruby On Rails 4,Rspec,Capybara,在我的Rails4/rspec应用程序中,我需要使用数据目标属性单击一个没有正式“链接”的区域 html 我目前得到这个错误 Capybara::ElementNotFound: Unable to find css "span[data-target='#myInfoZone1']" 如何让水豚“找到”并点击区域 谢谢你的帮助 编辑 我发现了水豚为什么找不到它 出于一个我无法理解的原因,这就是capybara发现的html输出代码 <!-- city zone -->

在我的Rails4/rspec应用程序中,我需要使用数据目标属性单击一个没有正式“链接”的区域

html

我目前得到这个错误

Capybara::ElementNotFound:
       Unable to find css "span[data-target='#myInfoZone1']"
如何让水豚“找到”并点击区域

谢谢你的帮助

编辑

我发现了水豚为什么找不到它

出于一个我无法理解的原因,这就是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开发工具时,我发现:

<!-- 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>

所以我猜水豚看到的和我加载页面时看到的一样来源:否。 为什么我附加的javascript没有出现在html代码源中


如何使capybara工作

capybara的默认驱动程序只测试后端应用程序服务器呈现的html。如果您还想使用前端javascript测试页面,那么应该使用支持javascript的驱动程序和Capybara

幸运的是,网站上的人制作了一个Capybara扩展,您可以轻松地将其安装到您的Gemfile中。按照有关如何安装gem的说明进行操作

最后,一旦您安装了它,您可以通过在您的功能/场景中添加js:true来在您的功能规范中启用javascript测试,如下所示:

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

水豚的发现应该会起到相应的作用!我已经模拟了相同的场景,它似乎工作得很好。我猜您的场景和/或视图还有其他问题。确保您访问的是正确的“显示”视图,或者最好尝试实际访问实际浏览器和视图源上的路径,以确保您的目标是正确的选择器。这真的很奇怪。我使用了save_和open_页面,在水豚看到页面时加载页面,我确实看到了span元素和。因此该视图是正确的,但是capybara仍然说它在测试中看不到它。capybara-webkit是任何javascript集成测试的答案。如果您的场景中有前端javascript操作加载到页面加载中,那么您必须在测试中启用javascript。安装capybara webkit很容易。在gem文件中包含gem,将Capybara.javascript\u driver=:webkit添加到rails\u helper.rb文件中,并在feature RSpec.feature“your feature to test”中添加js:true do,它应该可以工作。你也可以在这里查看@moeabdol“Running specs with Javascript”一节是的,我有capyabar webkit,但我没有在我的测试块中输入:js=>true。你就是那个人!请用下面真正正式的答案回答问题,这样我就可以把问题和要点归给你:)谢谢你的帮助!但是我有一个pb,非常棘手:如果我不将js=>true,capybara就找不到span(因为它是通过一个带有.append的js文件带到html中的),但是如果我使用js=>true,capybara会找到span,但是,正如我通过save_和_open_页面加载测试视图所看到的,它会将span的nb增加一倍。这很可能是由于一个众所周知的图尔布林克pb发射了两次js。我的pb是,它在我的普通应用程序(我检查过)中没有这样做,但在rspec/capybara测试中只有双重激发。如何在测试中避免这种情况?我有jquery TurboLink,但在测试中仍然会触发两次js。您是否仔细检查了所有javascript是否都在$(“document”).ready(function(){//your javascript here})中运行;我明天会检查,但为了避免在真正的应用程序中触发双重事件,我已经删除了该文档。准备就绪,但内部测试仍然是双重触发。奇怪的是,实际视图没有问题,但rsoec水豚保存和打开页面却没有。明天我会加倍考虑。tx谢谢你的帮助我没有任何文档(准备好),只是使用Paloma gem,但我不认为这是相关的。我想这可能是我使用gon gem做的。无论如何,我会调查的。
<!-- 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>
RSpec.feature "test my new feature", js: true do
  # my test
end