我正在使用带有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()
答案 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')