ruby-on-rails - 使用 Capybara 测试文件上传 - 不是表单,而是按钮和 javascript 函数

标签 ruby-on-rails angularjs rspec capybara

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

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

相关文章:

javascript - 如何在 Angular 指令的 Jasmine 单元测试中触发点击事件?

ruby-on-rails - 配置 Capybara + Selenium 以通过 SSL 进行测试

ruby-on-rails - RSpec - @controller 为零

ruby - if + else 和 if -> unless 不一致

ruby-on-rails - 无法更改 spree 3.0 上的货币符号

ruby-on-rails - rails : difference between placing stylesheets under 'assets' vs. 'public'

ruby-on-rails - AWS Elasticbeanstalk 应用程序的 Rails : How to get puma 3. 11?

ruby-on-rails - learn-rails bundle 安装解析 Gemfile 时出错

angularjs - ng-repeat 效率和工作

javascript - 带有 ng-repeat 的 ng-click 不适用于直接表达式(不是函数)