使用 Capybara 在不可见元素中附加文件

attach file in invisible elements with Capybara

我从 capybaracucumberwebdriver 开始,我的任务是测试图像字段的上传。

所以我模拟了一个我可以学习的运输环境,它工作正常,但是我需要将元素“隐藏”,我不知道有没有水豚的方法select它。

所以我的代码朝这个方向发展:

HTML

<input type="file" name="attach-file" style="display: none;">

Capybara/Cucumber

addMedicine_page.attach_file('attach-file', 'assets/asset.jpg')

但是它会导致 Unable to find visible file field "attach-file" message that is not disabled (Capybara :: ElementNotFound)

如果您要制作文件输入元素 non-visible,您必须有一些可见元素可供用户使用,与之交互将触发文件输入文件选择。在这种情况下,最好的解决方案是使用 attach_file

的块接受
page.attach_file('assets/asset.jpg') do
  # perform whatever action the user would to trigger the file selection
  click_button 'Upload file'
end

如果你不能为你工作,你真的应该能够并且它最接近地复制用户行为因此使测试最有效,那么你可以使用 make_visible 选项

page.attach_file('attach-file', 'assets/asset.jpg', make_visible: true)

这将暂时使文件输入可见,将文件附加到它,然后 re-hide 它。如果您的页面 make_visible 应用的标准 CSS 无法使输入可见,您可以将 CSS 值的散列设置为使用而不是 true

https://www.rubydoc.info/github/jnicklas/capybara/Capybara/Node/Actions#attach_file-instance_method