3

我正在尝试使用 capybara/cucumber 启用 autoUpload 选项来测试 jquery-file-upload 插件。该问题似乎与 autoUpload 选项有关,因为在没有设置 autoUpload 选项的情况下,测试环境中的上传工作有效。我正在使用 attach_file capybara 方法上传。该方法触发了更改事件侦听器,但显然没有太多其他内容。它永远不会触发附件的创建操作,当我尝试手动触发提交事件侦听器时,创建操作中的 params[:attachment] 为空,无法创建附件。

目前的设置方式是这样的:

  • 我有 3 个模型,一个项目模型,一个附件模型和一个问题模型
  • 问题的索引页面上有 2 个表单 - 一个处理提交新附件的表单,另一个处理提交新问题的表单
  • 每当触发附件创建操作时,jquery-file-upload 通过 javascript 填充隐藏字段,其中包含将附件添加到相关问题所需的数据 - 这是通过 jquery-file-upload 的 fileuploadcompleted 回调完成的

每当我尝试手动上传文件时,这种升级方式都有效,但在测试环境中失败。我尝试在附件表单中添加一个隐藏的提交按钮,当我通过水豚按下该按钮时,它会触发创建操作,但参数再次为空。我对该怎么做的想法已经不多了,所以如果有人有类似的问题,如果他们能帮助我,我将不胜感激。

如果有帮助,这里有一些相关的代码:

jquery-file-upload 初始化和附件形式

使用的宝石:
Rails 3.2.12
Capybara 2.1.0
Capybara-webkit 1.0.0
Jquery-fileupload-rails 0.3.0 - 也使用 0.4.1 进行测试,结果相同

如果您需要更多代码或任何其他信息,请告诉我,我可以立即编辑此帖子。

谢谢!

4

2 回答 2

0

我有类似的问题,但我发现:

  1. Capybara + Webdriver 需要特定于平台的路径分隔符(在 Windows 上,仅'\'不管 Windows 支持'/',在 *nix 上 - 仅'/'等),Capybara 对此不做任何事情
  2. Capybara + WebDriver 需要完整路径
  3. 您不能将文件附加到隐藏文件输入(例如,当您使用 JQuery FileUpload 插件时)。

我使用选择器查找隐藏元素并使用特定于平台的分隔符设置文件路径:

path = File.expand_path(rel_path).gsub('/', File::ALT_SEPARATOR || File::SEPARATOR)
find(:file_field, input_id, visible: false).set(path)

就我而言,它适用于下一个版本的 gem:

gem "jquery-fileupload-rails", "0.4.1"

gem 'capybara', '2.2.1'
gem 'selenium-webdriver', '2.41.0'
于 2014-04-05T13:08:18.170 回答
0

如果有人遇到这个老问题并且正在努力使用 Capybara 和Poltergeist测试 jquery-fileupload (另一个答案是关于 selenium),请尝试将 PhantomJS 升级到 2.1.0 或更高版本。

我在让它工作时头疼不已事实证明,问题的根源是 PhantomJS 2.0 中的一个已知问题。升级到 2.1.1 修复了它。

(如果您使用的是自制软件,您可以通过运行brew updatethen来更新 PhantomJS brew upgrade phantomjs

于 2016-05-01T17:10:36.170 回答