使用Capybara测试文件上传 - 不是表单而是按钮和javascript功能

问题描述 投票:0回答:1

我正在努力让测试工作,测试了几种方法,到目前为止没有任何工作。我有一个按钮

<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>

这是一个按钮,当点击打开OS文件浏览器时,任何人都知道如何让它工作,因为我尝试了attach_file,page.attach_file,find(“。ut-upload-button”)。set(Rails.root +'spec /文件/ file.txt的“)

上传后,页面应显示Toast Success

expect(page).to have_toast('Success')

对不起,如果这是一个基本的错误或愚蠢的问题,我只是开始使用rspec和capybara并完全迷路了

ruby-on-rails angularjs rspec capybara
1个回答
0
投票

您不能这样做,因为一旦系统文件浏览器打开,驱动程序就无法与之交互。您需要为实际元素调用attach_file(在您的情况下可能隐藏在页面上)。由于您没有显示HTML,因此我无法提供确切的代码 - 但假设您有一个类似以下的元素

<input type='file' name='file_upload'>

并且输入通过某种类型的CSS隐藏在视图之外

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项目的主分支,它目前有试用支持将块传递给打开文件选择器的attach_file。在你的情况下可能是这样的

page.attach_file(Rails.root + 'spec/files/file.txt') do
  page.find(".ut-upload-button").click
end

该功能可供用户测试,可能会或可能不会进入Capybara 3.15(取决于报告使用多种方式处理文件输入的方式)在一个月左右发布时。

© www.soinside.com 2019 - 2024. All rights reserved.