Capybara ::找不到<select>的元素由onchange of previous element填充</select>

时间:2014-08-15 19:17:06

标签: rspec capybara

当我为表单的功能测试运行bundle exec rspec时出现以下错误:

 Failure/Error: select('Boston Commons - Vacation English', :from => 'school_application_program')
 Capybara::ElementNotFound:
   Unable to find option "Boston Commons - Vacation English"

以下是我的功能规范中的方案片段:

select('Boston Commons', :from => 'school_application_fls_center')
select('Boston Commons - Vacation English', :from => 'school_application_program')

第二行失败。

在我的开发环境中,我访问场景访问的相同路线, 执行上一个选择,然后确认school_application_program<select>标记的ID,并且选项名称与我正在检查的名称完全相同。

我的唯一猜测是,由于某种原因,我的javascript onchange功能无法正确填充<select>标记,但鉴于该功能,这并没有多大意义spec应该完全反映开发环境。

onchange事件被绑定到紧接<select>之前的school_application_program标记,并重置school_application_program的选项

以下是填充school_application_program <select>

的javascript
 $("#school_application_fls_center").change(function(){
var center_id = document.getElementById("school_application_fls_center").value;
var formdata = {center: center_id}; 
$.ajax({
    url: "/application/get_programs_for_center",
    type: "POST",
    datatype: 'json',
    data: formdata,
    success: function(response){
      var options = $("#school_application_program"); 
      removeOptions(document.getElementById("school_application_program"));
      $.each(response.programs, function(i,item) {
        options.append($("<option />").val(response.programs[i].id).text(response.programs[i].name)); 
      });
    }
});
});

这是我的开发环境中的一个镜头,在我完成规范手动完成的行为后,在测试失败时显示表单。

enter image description here

1 个答案:

答案 0 :(得分:0)

所需要的只是在定义:js => true时通过添加scenario标志来启用Javascript,如下所示:

scenario 'happy path that uses AJAX', :js=>true do
   #etc.
end