Capybara::ElementNotFound:无法找到文件字段“文件”

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

我正在测试文件上传,即 CSV。在我的代码和浏览器 HTML 中,我找到了文件字段,但在测试时,水豚无法找到该文件字段。我努力尝试不同的方法,但无法解决问题。这里部分看起来像这样:

#add_file_box
  %div.msg
  %h1.page-header
    = "Upload a CSV"
  %h4.title

  = form_tag dummy_path, multipart: true, class: "upload_csv" do
    = hidden_field_tag :dmp_id, @dmp.id
    .form-group
      .input-group
        %span.input-group-btn
          %span.btn.btn-primary.btn-file
            Choose file
            = file_field_tag :file, style: 'line-height: normal',  accept: "text/csv", class: "file_input"
        %input.form-control.input-custom{:readonly => "", :type => "text"}
    .form-group
      = submit_tag "Upload CSV", class: "btn btn-primary", id: "upload_csv"

水豚测试看起来像这样

 within '.upload_csv' do
     page.attach_file('file', "#{Rails.root}/spec/acceptance/test_uploads/input_output.csv")
     click_button 'Upload'
   end

如果您能帮我解决这个问题,我将不胜感激?

ruby-on-rails ruby capybara rspec3
2个回答
16
投票

Capybara 2x(capybara问题)默认情况下找不到隐藏元素。

您可以将ignore_hidden_elements设置为false:

Capybara.ignore_hidden_elements = false

或者只需将 :visible 选项添加到您的方法中:

within '.upload_csv' do
  attach_file('file', "#{Rails.root}/spec/acceptance/test_uploads/input_output.csv", visible: false)
    click_button 'Upload'
end

这解决了我的问题。

注意:

:visible
选项也受到大多数内部与
Capybara::Query
配合使用的 Capybara 方法的支持(如
find
all
has_css?
have_selector
等)


0
投票

在样式隐藏文件输入的情况下,您还可以使用

make_visible: true
上的
attach_file
选项。

可能的选项值是应用于文件输入的

Hash
CSS 值(以便使其可见),或者
true
,这将尝试一些默认值。

来自文档

make_visible (true, Hash) — 在尝试附加文件之前要更改的 CSS 样式的哈希值, 如果为 true,则 { opacity: 1, display: 'block', Vivisibility: 'visible' } 是 使用(可能并非所有驱动程序都支持)。

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