Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS完成前的水豚火测试_Javascript_Jquery_Ruby On Rails_Rspec_Capybara - Fatal编程技术网

Javascript JS完成前的水豚火测试

Javascript JS完成前的水豚火测试,javascript,jquery,ruby-on-rails,rspec,capybara,Javascript,Jquery,Ruby On Rails,Rspec,Capybara,我有一个capybara测试,检查页面上是否找到了类。该类允许用户查看侧栏。下面是测试 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')

我有一个capybara测试,检查页面上是否找到了类。该类允许用户查看侧栏。下面是测试

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_uulesson-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_uuu-lesson-2',等等:20)。单击
不会消除错误,那么您的页面加载有问题(或者您键入了错误的选择器),尽管我不希望这会造成间歇性故障。检查您的测试日志,了解实际提出了哪些请求和/或添加了哪些请求

sleep 10
page.save_screenshot

在搜索之前,请查找/单击并查看页面,看看它是否符合您的期望。另一件需要检查的事情是,您在驱动程序配置中显示了JS错误(我假设您使用的是poltergeist,因为大多数默认使用.trigger的人通常都是这样的)

您不需要通过测试吗JS:true选项代码更新以反映这一点。无论如何都会出现问题。它失败的原因是什么?它告诉我找不到元素。很有趣。我删除了
wait_for_ajax
并将
默认值\u max_wait_time
增加到10秒,但仍然收到与我的答案中发布的错误相同的错误。@jason328您是否尝试将
sleep 3
放在单击之前?嗯--所以是before块中的实际查找间歇性失败-而不是测试?然后,它与ajax或事件处理程序没有任何关系。尝试
查找('lesson-sidebar_uu-lesson-2',等待:20)。单击
-如果仍然失败,则说明页面加载有问题。您确定这是间歇性错误吗?你在哪里进行
访问…
?是的,我去了。还有
visit
是不是为了简单起见,我没有把它包括进去。抱歉造成混淆。我尝试了
查找('lesson-sidebar\uu-lesson-2',等待:20)。单击
但仍收到相同的问题。