[英]Capybara Fires Test Before JS Finished
我有一個水豚測試,檢查是否在頁面上找到了一個類。 該類允許用戶查看側邊欄。 這是下面的測試。
feature 'Lesson Sidebar', js: true do
before do
visit course_lesson_path
end
context 'persists the lesson sidebar display' do
before do
find('#lesson-sidebar__lesson-2').trigger('click')
end
scenario do
expect(page).to have_selector('.lesson-page__sidebar--expanded', visible: false)
end
end
end
單擊#lesson-sidebar__lesson-2
時,JS代碼只需將類添加到側邊欄元素。 該代碼在文檔就緒調用中。
$(document).ready(function() {
$('.lesson-subnav__heading').on("mousedown", "#lesson-sidebar__lesson-2", function (e) {
$('#sidebar').addClass('lesson-page__sidebar--expanded')
})
})
這是我收到的錯誤響應。
Capybara::ElementNotFound:
Unable to find css "#lesson-sidebar__lesson-2"
這是我的問題。 測試將隨機失敗。 不僅用於此測試,而且還用於此頁面內的其他測試。 我的假設是該測試在JS有機會完成之前運行,這就是為什么該測試有時會失敗的原因。 如何解決此問題,以便每次都能通過測試?
更新 :實際錯誤的發布表明,在before塊中找到的是找不到元素,這意味着這與wait_for_ajax
調用或事件處理程序綁定無關。 如果執行類似find('#lesson-sidebar__lesson-2', wait: 20).click
不會使錯誤消失,則盡管我在加載頁面時遇到了問題(或者輸入了錯誤的選擇器)不會期望會造成間歇性故障。 檢查您的測試日志中實際發出和/或添加了哪些請求
sleep 10
page.save_screenshot
在查找/單擊之前,然后查看頁面以查看是否符合您的期望。 要檢查的另一件事是,您正在驅動程序配置中顯示JS錯誤(我假設您使用poltergeist,因為大多數默認使用.trigger的人通常都是)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.