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