我有一个水豚测试,检查是否在页面上找到了一个类。该类允许用户查看侧边栏。这是下面的测试。
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有机会完成之前运行,这就是测试有时失败的原因。我如何解决这个问题,以便每次测试通过?
答案 0 :(得分:0)
更新:实际错误的发布显示,它是找不到元素的before块中的find,这意味着这与wait_for_ajax
调用或事件处理程序没有任何关系捆绑。如果执行find('#lesson-sidebar__lesson-2', wait: 20).click
之类的操作不会使错误消失,那么您的页面加载存在问题(或者您错误地选择了选择器),尽管我不希望这会导致间歇性故障。检查测试日志以了解实际发出的请求和/或添加
sleep 10
page.save_screenshot
在查找/点击之前查看页面以查看它是否符合您的预期。要检查的另一件事是你在驱动程序配置中显示你的JS错误(我假设你使用了poltergeist,因为大多数人默认使用.trigger)