Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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
Jquery Capybara::ElementNotFound for AJAX填充<;选择>;选项_Jquery_Ajax_Rspec_Capybara - Fatal编程技术网

Jquery Capybara::ElementNotFound for AJAX填充<;选择>;选项

Jquery Capybara::ElementNotFound for AJAX填充<;选择>;选项,jquery,ajax,rspec,capybara,Jquery,Ajax,Rspec,Capybara,在这里得到这个错误之后,我再次得到在我的测试套件上抛出的相同错误。区别在于,现在我调用了一个函数generate\u steps\u来验证学校定价,该函数执行以下操作 def generate_steps_to_validate_school_pricing(school_pricing_hash, school, homestay_single_room_per_week_cost, airport, airport_price) school_pricing_hash.each do

在这里得到这个错误之后,我再次得到在我的测试套件上抛出的相同错误。区别在于,现在我调用了一个函数
generate\u steps\u来验证学校定价
,该函数执行以下操作

def generate_steps_to_validate_school_pricing(school_pricing_hash, school,   homestay_single_room_per_week_cost, airport, airport_price)
  school_pricing_hash.each do |program_name, program |
    prog_name = school + " - " + program_name
    program.each do |price_point_number, price_per_week|
      visit "/application/new"
      fill_in "school_application_first_name", :with => "bob"
      fill_in "school_application_family_name", :with => "balaban"
      check("school_application_sevic") #200 dollars
      select(school, :from => 'school_application_fls_center')
      check('school_application_I_20')
      check('school_application_pay_application_fee_or_full')
      fill_in "school_application_start_date", :with => "05/11/2015"
      select(airport, :from => 'school_application_arrival_airport')
      select('Homestay Single Room', :from => 'school_application_housing_type')
      check("school_application_health_insurance")
      check("school_application_transfer_student")
      fill_in "school_application_comments", :with =>"Lorem"
      fill_in "school_application_gender", :with =>"trans"
      fill_in "school_application_address", :with=> "5/11/15"
      fill_in "school_application_city_state_province", :with =>"Dubai"
      fill_in "school_application_email", :with =>"bob@balaban.com"
      select(airport, :from => 'school_application_arrival_airport')

      fill_in "school_application_postal_code", :with =>"90226"
      fill_in "school_application_country", :with=> "Zimbabwe"
      fill_in "school_application_date_of_birth", :with =>"Dubai"
      fill_in "school_application_phone_number", :with => "2134932434"
      select(price_point_number, :from => "school_application_duration")
      check("school_application_read_everything")
      fill_in "school_application_country_of_birth", :with =>"Aim"
      fill_in "school_application_country_of_citizenship", :with =>"Durango"
      check("school_application_work_with_ad")

      fill_in "school_application_agency", :with =>"Aim"
      fill_in "school_application_fax_number", :with =>"Durango"
      save_and_open_page
      select(prog_name, :from => "school_application_program") # this is the line that fails
      total = price_point_number[0] *price_per_week
      total = total + price_point_number[0] * homestay_single_room_per_week_cost
      total = total + 500 #SEVIS fee (200) + Housing Application and Application Fees (150 each)
      total = total + airport_price
      total = total + 35 * price_per_week[0] #current Insurance for 2015 is 35/week

      click_button "Continue"
      expect(page).to have_text(total.to_s  + " USD")
    end
  end
end
虽然函数中定义的步骤序列没有应用
:js=>true
,但是调用它的
场景会应用。我确信AJAX调用通常是作为与通过ajaxspass填充的另外两个
相对应的测试工作的

当我执行
save_和\u open_page
时,应该有
prog_name
的下拉列表是空的,这似乎告诉我,由于某种原因,特定的AJAX调用正在中断。我不确定如何测试单个控制器方法以查看发生了什么,我同样不确定这样做的意义,因为当我执行与我在
localhost
上测试的快乐路径完全相同的过程时,所有AJAX调用都能完美地工作,包括填充当前未填充的

任何关于如何进一步系统地调试的说明都将不胜感激。谢谢大家!

注意:问题很可能是测试不会等待服务器响应数据,直到它返回回调。有没有办法让它等到收到响应


更新:尝试扩展Capyabara。默认等待时间为20秒,但仍然失败,我认为这排除了异步问题的可能性?

在认为这是异步问题后,我首先更改了请求的Capybara等待时间,然后最终实现了这个更干净、更可靠的解决方案,以确保通过遵循本教程完成所有异步请求:

所以在实现了helper函数之后,我确定这不是一个异步问题,这意味着AJAX调用本身肯定存在一些问题。因为它在我的本地服务器上工作,所以我不明白在测试完全相同的功能时,它怎么会失败,但使用RSpec

当我再次访问我的JS时,我看到我对服务器进行了以下调用,因为该方法失败了:

    $.ajax({
    url: "http://0.0.0.0:3000/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));
      });
    }
});
$.ajax({
url:“http://0.0.0.0:3000/application/get_programs_for_center",
类型:“POST”,
数据类型:“json”,
数据:formdata,
成功:功能(响应){
var选项=$(“学校应用程序”);
移除选项(document.getElementById(“学校应用程序”);
$。每个(响应程序、功能(i、项){
options.append($(“”).val(response.programs[i].id).text(response.programs[i].name));
});
}
});
通过提供本地服务器的完整路径,当我手动尝试相同的行为但由于明显原因失败时(当我运行
bundle exec rspec
(使用不同的服务器)请求失败时,它将成功地在本地发出请求。我编写的其他类似AJAX请求都称为相对路径,因此都是成功的。

您可以尝试本教程