2016-03-16 93 views
2

我使用水豚與webkit驅動程序,當我用js: true運行測試時,會引發下面列出的錯誤。當我在其他測試中做同樣的事情,沒有js: true一切工作正常。水豚未能找到元素的位置

PS。在這個測試中不需要js :true。這段代碼實際上是在一個幫助器中,但我把它放在這裏就像測試,所以它會更容易理解。我在另一個測試中使用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 

/logged_days:

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

回答

1

我覺得我有這個錯誤在我所有的年只有一次,它是關於一個元素被覆蓋或以其他方式無法點擊。

瀏覽器的webinspector的徹底調查是必要的,你必須在這裏:你必須確定你的js做了什麼,點擊目標。

1

當使用js:true時,您的頁面不僅運行JS,而且還處理了CSS。這意味着您最終可能會看到不可見,重疊或移動的元素。您需要查看在真實瀏覽器中對元素所做的操作,並確保該元素實際上是可點擊的,或者需要先執行其他操作才能使其可點擊。其次,不要在current_path中使用.eq - 當你使用支持js的驅動程序時,它會導致片狀測試。而是使用has_current_path匹配器

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