首页 > 解决方案 > 如何使用 capybara 上传资产?

问题描述

我有

<input type="file" name="file" id="file" class="form-control-file teste" style="display: inline" ;="" accept=".pdf">

并尝试

attach_file('file','PATH')

也试试

find('form input[type="file"]').set('PATH')

但我的结果是

cannot attach file, input[id=file] does not exist (Capybara::FileNotFound)

标签: rubycapybara

解决方案


您发布的错误消息是您尝试上传的文件不存在时返回的错误消息。

问题是你不应该input[id=file]作为文件名传递。我不确定您使用的是哪个版本的 Capybara,但在当前版本attach_filedef attach_file(locator = nil, paths, make_visible: nil, **options),定位器是文件输入的名称、ID 或相关标签文本,路径是要上传的文件的全名(或者可能是文件名数组)。问题在于,您显示的任何代码似乎都不会产生您声称的错误,除非您交换了参数,并且错误地传递了 CSS 选择器而不是定位器。

注意:带有一些驱动程序(应该是任何支持 JS 的驱动程序)的 Capybara 3.15 支持 beta 模式attach_file,您不必指定文件输入,而只需要与用户触发文件选择的任何操作进行交互即可在尝试使用隐藏文件输入元素的 UI 进行测试时很有帮助

attach_file 'PATH' do
  click_button 'Select File' # whatever action a user would do to select the file
end

推荐阅读