Capybara未能找到元素的位置

时间:2016-03-16 15:14:51

标签: ruby-on-rails ruby testing capybara capybara-webkit

我正在使用带有js: true驱动程序的Capybara,当我使用js: true运行测试时,会引发下面列出的错误。当我在没有js :true的其他测试中做同样的事情时,一切正常。

PS。在此测试中不需要js: true。这段代码实际上是在一个帮助器中,但我把它放在这里就像测试一样,所以它更容易理解。我在调用这个帮助器方法的另一个测试中使用Capybara::Webkit::ClickFailed: Failed to find position for element /html/body/div/div/div/div[2]/a[12]

以下代码会引发scenario "adding logged days", js: true do visit '/logged_days' find(:xpath, "//a[contains(.,'12')]").click # click_link("12") raises same error expect(current_path).to eq("/logged_days/new") fill_in "Опис виконаної роботи", with: "Some description" fill_in "Кількість відпрацьованих годин", with: 40 click_button "Додати" expect(current_path).to eq("/logged_days") expect(page).to have_content("40") end

   <div class="page-header">
    <h2>Logged Days <small>March</small></h2>
   </div>
   <div class="conteiner-fluid logged_days_container">
    <% for i in 1..31 %>
     <%= link_to new_logged_day_path(:cal_date => "#{i}"), method: :get do %>
      <div class="calendar_cell">
        <p class="cell_date"><%= i %></p>
        <p class= "cell_text"></p>
      </div>
    <% end %>
   <% end %>
</div>

/ logged_days:

$.uniqueSort()

2 个答案:

答案 0 :(得分:1)

我认为这些错误在我的所有年份中都只出现过一次,这是关于一个元素被覆盖或者无法点击的。

此处需要使用浏览器的webinspector进行彻底调查:您必须确定您的js对该点击目标的影响。

答案 1 :(得分:1)

当使用js:true时,您的页面不仅运行JS而且还处理了CSS。这意味着您最终可能会看到不可见,重叠或移动的元素。您需要查看在真实浏览器中对元素执行的操作,并确保该元素实际上是可单击的,或者用户必须先执行哪些其他操作才能使其可单击。

其次,不要将.eq与current_path一起使用 - 当您使用具有js功能的驱动程序时,它会导致不稳定的测试。而是使用has_current_path匹配器

expect(page).to have_current_path('/logged_days/new')