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选项不同)