我正在努力使该测试正常工作,测试了几种方法,但到目前为止没有任何效果。 我有一个按钮
<div >
<a href class="btn btn-default btn-block btn-lg btn-shadowed ut-upload-button"
ng-file-select
ng-file-change="uplFile($event, $file)">
<i class="icon">i</i>
</a>
</div>
这是一个按钮,当点击打开操作系统文件浏览器时,任何人都知道如何让它工作,因为我尝试了 attach_file、page.attach_file、 find(".ut-upload-button").set(Rails.root + 'spec/files/file.txt')
上传后页面应显示 toast 成功
expect(page).to have_toast('Success')
对不起,如果这是一个基本的错误或愚蠢的问题,我刚刚开始使用 rspec 和 capybara,完全迷路了
最佳答案
您不能这样做,因为一旦系统文件浏览器打开,驱动程序就无法与之交互。您需要为实际的 <input type='file'> 元素(在您的情况下可能隐藏在页面上)调用 attach_file
。由于您没有显示您的 HTML,我无法提供确切的代码 - 但假设您有一个类似于以下内容的元素
<input type='file' name='file_upload'>
并且输入通过某种类型的 CSS 隐藏在 View 中,然后类似于
page.attach_file('file_upload', Rails.root + 'spec/files/file.txt', make_visible: true)
应该适合你。如果页面上只有一个文件上传,你也可以这样做
page.attach_file(Rails.root + 'spec/files/file.txt', make_visible: true)
如果您愿意尝试 Capybara 项目的 master 分支,它目前已试用支持将 block 传递给打开文件选择器的 attach_file
。在您的情况下,这可能类似于
page.attach_file(Rails.root + 'spec/files/file.txt') do
page.find(".ut-upload-button").click
end
该功能用于用户测试,并且可能会或可能不会在 Capybara 3.15 中发布(取决于据报道它与文件输入样式的多种方式一起工作的情况),当它在一个月内发布时或所以。
关于ruby-on-rails - 使用 Capybara 测试文件上传 - 不是表单,而是按钮和 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54871543/