Как загрузить ресурс с помощью capybara?

#ruby #capybara

#ruby #capybara

Вопрос:

У меня есть

 <input type="file" name="file" id="file" class="form-control-file teste" style="display: inline" ;="" accept=".pdf">
  

И попробуйте

 attach_file('file','PATH')
  

попробуйте тоже

 find('form input[type="file"]').set('PATH')
  

но мой результат был

 cannot attach file, input[id=file] does not exist (Capybara::FileNotFound)
  

Ответ №1:

Опубликованное вами сообщение об ошибке — это сообщение об ошибке, которое возвращается, когда файл, который вы пытаетесь загрузить, не существует.

Проблема в том, что вы не должны передавать input[id=file] в качестве имени файла. Я не уверен, какую версию Capybara вы используете, но в текущих версиях она attach_file определяется как def attach_file(locator = nil, paths, make_visible: nil, **options) , где locator — это имя, идентификатор или связанный текст метки входного файла, а paths — это полное имя загружаемого файла (или, возможно, массив имен файлов). Проблема заключается в том, что не похоже, чтобы какой-либо из показанных вами кодов мог вызвать ошибку, о которой вы заявляете, если только вы не поменяли местами аргументы и неправильно передали CSS-селектор вместо локатора.

Примечание: Capybara 3.15 с некоторыми драйверами (должны быть любые драйверы с поддержкой JS) поддерживает бета-режим для attach_file , где вам не нужно указывать ввод файла, а вместо этого просто нужно взаимодействовать с тем, что пользователь мог бы сделать, чтобы вызвать выбор файла, что может быть полезно при попытке тестирования с пользовательскими интерфейсами, которые скрывают элементы ввода файла

 attach_file 'PATH' do
  click_button 'Select File' # whatever action a user would do to select the file
end