代码之家  ›  专栏  ›  技术社区  ›  tetiross

用茧和水豚上传多个文件

  •  1
  • tetiross  · 技术社区  · 8 年前

    我在测试上传多个文件时遇到问题 capybara 使用 cocoon 。如何查找所有字段 id: "image" 并附加到每个文件中?

    这是我的测试代码:

      click_link "Add photo"
      wait_for_ajax
    
      click_link "Add photo"
      wait_for_ajax
    
    
      page.all(:class, '.attach_fileds').each do |el|
        attach_file( el, "#{Rails.root}/spec/assets/example.jpg")
      end
    
      click_button "Add"
    
      expect(Post.count).to eq(1)
      expect(Post.last.images.size).to eq(2)
    

    错误消息: Unable to find file field #<Capybara::Element tag="input" path="/html/body/div/div/div/form[@id='new_post']/div[@id='educations']/div[1]/input[@id='image']">

    1 回复  |  直到 8 年前
        1
  •  1
  •   Thomas Walpole    8 年前

    你不应该有多个元素具有相同的id,因为这是非法的html。根据示例代码(不确定:class选择器在猜测什么),您确实希望每个元素都有一个“attach_field”类。 #attach_file 不将元素作为第一个参数,而是使用元素的名称、id或标签文本。由于您已经有了元素,您可以对每个元素调用#set

    page.all(:css, '.attach_field').each do |el
      el.set "path of file to upload"
    end
    

    如果你只是想输入你能做的每一个文件

    page.all(:css, 'input[type="file"]').each do |el|
      el.set "path of file to upload")
    end
    

    还要注意,您需要在 click_button "Add" expect(Post.count).to eq(1) 让测试等待提交完成-类似

    expect(page).to have_text('Image Uploaded') # if the page adds text when image is uploaded
    

    expect(page).to have_current_path('/some_new_path') # if the page url changes after the upload is complete