Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用capybara测试隐藏输入上的文件附件?_Ruby On Rails_Rspec_Capybara - Fatal编程技术网

Ruby on rails 如何使用capybara测试隐藏输入上的文件附件?

Ruby on rails 如何使用capybara测试隐藏输入上的文件附件?,ruby-on-rails,rspec,capybara,Ruby On Rails,Rspec,Capybara,我在标签内隐藏了输入: <label for="upload"> <input class="hidden" type="file" name="file[picture]"> </label> 单击标签时,我会附加一个文件,然后确认 在模态窗口弹出之后,我需要找到合适的div类 我如何在水豚的帮助下测试这一点?您可以按照以下方法做一些事情: find('label[for=upload]').click attach_file('input[nam

我在标签内隐藏了输入:

<label for="upload">
  <input class="hidden" type="file" name="file[picture]">
</label>

单击标签时,我会附加一个文件,然后确认

在模态窗口弹出之后,我需要找到合适的div类


我如何在水豚的帮助下测试这一点?

您可以按照以下方法做一些事情:

find('label[for=upload]').click
attach_file('input[name="file[picture]"]'), 'path/to/file.png')

within '.modal-popup' do
   expect(page).to have_content '.divclass'
end

更新:Capybara 2.12在
attach\u file
中添加了一个
make\u visible
选项,因此如果使用2.12+您可以首先尝试

attach_file('file[picture]', 'path/to/file.png', make_visible: true)
在直接使用
之前,请自己执行脚本


文件输入是一种特殊情况,因为它们经常由于样式原因而隐藏,并使用系统模式进行交互。由于用户通常无法与页面上的隐藏字段进行交互,因此Capybara很难填充这些字段,因此对于文件输入,通常的做法是使用
execute\u script
使其可见,然后填充

execute_script("$('input[name=\"file[picture]\"]').removeClass('hidden')") # assumes you have jQuery available - if not change to valid JS for your environment
attach_file('file[picture]', 'path/to/file.png') # takes id, name or label text of field not a random selector

使用水豚'2.7.1':

attach_file('file[picture]', 'path/to/file.png', visible: false)

我看到这个答案被接受了,但它真的有效吗?它可能与恶鬼驱动程序一起工作,但可能不会与任何其他驱动程序一起工作,因为attach_文件不会与隐藏的驱动程序交互fields@TomWalpole你完全正确。我必须将
Capybara.ignore\u hidden\u elements=false
行添加到我的rails助手中,才能使其工作。@TomWalpole设置
可见:false
无效helping@BillyLogan而且它不应该这样做——水豚使得与隐藏字段的交互变得困难,因为用户不能。对于文件输入,通常的做法是使用execute_脚本使它们可见,然后调用attach_file。添加ignore\u hidden\u elements=false就像用原子弹炸死苍蝇,你会后悔的later@TomWalpole谢谢你,汤姆!make_visible:true+1此选项在不使用javascript的情况下工作(与make_visible选项不同)