Capybara attach_file方法不上传文件

时间:2015-11-10 21:54:10

标签: selenium-webdriver capybara

当我们网站上的用户想要创建新对象时,他们需要上传XML文件,然后使用AJAX将其传递给控制器​​操作。控制器方法解析XML文件中的属性并将它们传递回JavaScript,然后JavaScript自动填充大多数新的Object表单字段。

HTML看起来像这样:

 <input type="file" name="upload_datafile" id="upload_datafile" accept=".xml">

使用以下文件从文件输入中提取文件:

$("#upload_datafile").change(function() {    
     var file = $("#upload_datafile").prop("files")[0];
     ...

Capybara测试看起来像这样:

scenario 'upload file', js: true do    
     expect(page).to have_css '#upload_datafile'
     attach_file('upload_datafile', File.expand_path('spec/fixtures/files/valid.xml'))
     expect(page).to have_field 'name', with: 'Valid Object'
end

&#39;名称&#39;当&#39; valid.xml&#39;时,应该填充字段。已上传并已解析。相反,我们尝试读取文件的XML解析器会抛出以下错误:

NoMethodError:
     undefined method 'read' for "undefined":String

我已经手动测试了这个,并且没有抛出任何错误。 Capybara测试中的文件路径也是正确的。如果我在Capybara测试中抛出断点,我可以在浏览器中手动上传文件,它可以正常工作。似乎Capybara没有上传文件,而是我们的JavaScript传递字符串&#39; undefined&#39;到控制器操作,因为这是在尝试获取&#39;文件中的第0个文件时的结果。在Capybara测试期间输入文件的支柱。

为什么Capybara实际上传文件和/或为什么文件无法通过JavaScript访问?

0 个答案:

没有答案