使用 cocoon 和 capybara 上传多个文件
Multiple files upload with cocoon and capybara
我在使用 cocoon
测试通过 capybara
上传多个文件时遇到问题。我怎样才能找到带有 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']">
你不应该有多个具有相同 ID 的元素,因为那是非法的 html。根据您的示例代码(不确定 :class 选择器在猜测什么)您确实希望每个元素的 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
我在使用 cocoon
测试通过 capybara
上传多个文件时遇到问题。我怎样才能找到带有 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']">
你不应该有多个具有相同 ID 的元素,因为那是非法的 html。根据您的示例代码(不确定 :class 选择器在猜测什么)您确实希望每个元素的 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