text: I am trying to attach a file in my spec, but the capybara attach_file method does not work for me in poltergeist (it returns true but nothing gets attached). It does work in Selenium, but for other reasons I want to use poltergeist. I know that the phantomjs uploadFile method () simulates a user interacting with the file dialog which is what I think I need to do. I cannot figure out how to use it though in my Capybara spec.
  I am trying to use
  def drop_files(files, css_selector) js_script = 'fileList = Array(); ' files.count.times do |index| # Generate a fake input selector page.execute_script("if ($('#seleniumUpload#{index}').length == 0) { " \ "seleniumUpload#{index} = window.$('<input/>')" \ ".attr({id: 'seleniumUpload#{index}', type:'file'})" \ ".appendTo('body'); }") # Attach file to the fake input selector through Capybara attach_file("seleniumUpload#{index}", files[index], visible: false) # Build up the fake js event # js_script << "fileList.push(seleniumUpload#{index}.get(0).files[0]); " end js_script << "e = $.Event('drop'); " js_script << "e.dataTransfer = { files : fileList }; " js_script << "$('#{css_selector}').trigger(e);" # Trigger the fake drop event page.execute_script(js_script) end
  which comes from and works in selenium. The user that posted that says he has it working in poltergeist though.
  It turns out file uploading is currently broken on Phantomjs 2.0. I downgraded v1.9.8 and attach_file works now.