如何使用Rails,Cucumber和Capybara测试Dropzone.js上传?

Dav*_*son 5 css xpath ruby-on-rails cucumber capybara

我有一个使用Cucumber和Capybara进行测试的Rails项目.我有一个使用Dropzone.js的文件上传页面.

我的上传工作很有用,可以使用对话框或拖放.测试是另一回事.

我的表格中有以下字段:

<input id="photo_image" multiple="multiple" name="image" type="hidden">
Run Code Online (Sandbox Code Playgroud)

但是,在步骤定义中,我尝试了一些查找和附加文件数据的方法,但它们都不起作用.

我试过fill_in:

fill_in "photo_image",  with: photo
Run Code Online (Sandbox Code Playgroud)

我试过用css选择器找:

find('#photo_image').set photo
Run Code Online (Sandbox Code Playgroud)

我试过用xpath找到:

find(:xpath, "//input[@id='photo_image']").set photo
Run Code Online (Sandbox Code Playgroud)

但他们都没有看到隐藏的领域.

Unable to find css "#photo_image" (Capybara::ElementNotFound)

Unable to find xpath "//input[@id='photo_image']" (Capybara::ElementNotFound)

Unable to find field "photo_image" (Capybara::ElementNotFound)
Run Code Online (Sandbox Code Playgroud)

有没有可以使用Dropzone.js处理上传的测试方法还是没有希望?

And*_*lov 10

Capybara 2.1 默认情况下找不到隐藏元素.

您可以设置ignore_hidden_elements为false:

Capybara.ignore_hidden_elements = false

或者:visible为方法添加选项:

attach_file('photo_image', path_to_file, visible: false)
Run Code Online (Sandbox Code Playgroud)

我更喜欢第二个变体,因为在大多数情况下,在测试中找到的元素是可见的,如果其中一个被隐藏,最好让Capybara抛出异常.

注::visible选项也被大多数的水豚方法,在内部与工作的支持Capybara::Query(如find,all,has_css?,have_selector等)


Mag*_*num 0

你可以使用

it "should upload a file" do
  visit upload_file_path
  attach_file "uploadfile(id of field)", /path/to/file/to/upload
  click_button "Upload File"
end
Run Code Online (Sandbox Code Playgroud)

do ... end 之间的步骤应该适用于 rspec + capybara 或 cucumber + capybara

为什么不使用 :js => true ,它也会帮助找到隐藏元素..