2015-03-16 7 views
1

Я пытаюсь прикрепить файл в моей спецификации, но метод capybara attach_file не работает для меня в poltergeist (он возвращает true, но ничего не прикрепляется). Он работает в Selenium, но по другим причинам я хочу использовать poltergeist. Я знаю, что метод phantomjs uploadFile (http://phantomjs.org/api/webpage/method/upload-file.html) имитирует пользователя, взаимодействующего с диалоговым окном файла, который, как мне кажется, мне нужно делать. Я не могу понять, как использовать его, хотя в моей спецификации Capybara.Как использовать phantomjs uploadFile с Capybara и poltergeist?

Я пытаюсь использовать

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 

который приходит от https://github.com/teampoltergeist/poltergeist/issues/342 и работает в селена. Пользователь, который опубликовал сообщение, говорит, что он работает в полтергейсте.

ответ

1

Оказалось, что загрузка файлов в настоящее время отключена на Phantomjs 2.0. Я понизил v1.9.8, и attach_file работает сейчас.

+0

Нет Полтергейста 2.0 - вы имеете в виду phantomjs 2.0? К чему вы перешли? – Grandpa

+0

К сожалению, я исправил свой ответ, извините. Я понизился до версии 1.9.8. – Brandon

Смежные вопросы