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