使用capybara/cucumber测试jquery-file-upload

3
我正在使用Capybara / Cucumber测试jquery-file-upload插件,并启用了autoUpload选项。问题似乎与autoUpload选项有关,因为当未设置autoUpload选项时,在测试环境中上传功能正常运行。我正在使用attach_file Capybara方法进行上传。该方法触发change事件监听器,但似乎没有其他操作。它从未触发附件的create操作,当我尝试手动触发submit事件监听器时,create操作中的params[:attachment]为空,因此无法创建附件。
目前的设置方式如下: - 我有3个模型,一个项目模型,一个附件模型和一个问题模型 - 在Issues的索引页面上有2个表单 - 一个表单用于提交新附件,另一个表单用于提交新问题 - 每当触发Attachment create操作时,jquery-file-upload会通过JavaScript填充一个隐藏字段,其中包含将附件添加到相关问题所需的数据 - 这是使用jquery-file-upload的fileuploadcompleted回调完成的。
每当我手动上传文件时,这种上传方式都有效,但在测试环境中失败了。我尝试向附件表单添加一个隐藏的提交按钮,当我通过capybara按下该按钮时,它会触发create操作,但params再次为空。我已经想尽了办法,所以如果有人遇到类似的问题,如果他们能帮我解决,我将不胜感激。
如果需要,这是一些相关代码: jquery-file-upload initalization and attachment form 使用的宝石: Rails 3.2.12 Capybara 2.1.0 Capybara-webkit 1.0.0 Jquery-fileupload-rails 0.3.0 - 也测试过0.4.1,结果相同
如果需要更多的代码或其他信息,请让我知道,我可以立即编辑此帖子。
谢谢!
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)

在我的情况下,它可以与下一个版本的gems一起工作:

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

gem 'capybara', '2.2.1'
gem 'selenium-webdriver', '2.41.0'

0

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

我一直在苦苦挣扎,无法让它正常工作;结果发现问题的根源是PhantomJS 2.0中的已知问题。升级到2.1.1后问题得到解决。

(如果您使用homebrew,则可以通过运行brew update然后brew upgrade phantomjs来更新PhantomJS)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接