簡體   English   中英

水豚在JS完成之前進行測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM