我正在尝试在我的规范中附加一个文件,但是capybara attach_file方法在poltergeist中对我不起作用(它返回true但没有附加任何内容)。它在Selenium中有效,但由于其他原因,我想使用poltergeist。我知道phantomjs uploadFile方法(http://phantomjs.org/api/webpage/method/upload-file.html)模拟用户与文件对话框交互,这是我认为我需要做的。我在Capybara规范中无法弄清楚如何使用它。
我正在尝试使用
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并在selenium中工作。发布的用户表示他让它在恶作剧中工作。
答案 0 :(得分:1)
事实证明,文件上传目前已在Phantomjs 2.0上打破。我降级了v1.9.8并且attach_file现在正常工作。