2016-06-27 4 views
3

Я спрятался вход внутри метки:Как проверить прикрепление файла на скрытый ввод с помощью capybara?

<label for="upload"> 
    <input class="hidden" type="file" name="file[picture]"> 
</label> 

Когда я нажимаю на этикетке, прикрепить файл, а затем подтвердить.

После этого появляется модальное окно, и мне нужно найти соответствующий div-класс.

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

ответ

11

Update: Капибара 2,12 добавил make_visible возможность attach_file так что при использовании 2.12+ вы можете сначала попробовать

attach_file('file[picture]', 'path/to/file.png', make_visible: true) 

, прежде чем непосредственно используя execute_script самостоятельно


Входы файлов - это особый случай, поскольку они так часто скрыты для объяснения стиля и используют систему для взаимодействия. Капибара делает его трудно заполнить скрытые поля на странице, так как пользователи, как правило, не могут взаимодействовать с ними, поэтому для входа файлов обычной практикой является использование execute_script, чтобы сделать их видимыми, а затем заполнить их.

execute_script("$('input[name=\"file[picture]\"]').removeClass('hidden')") # assumes you have jQuery available - if not change to valid JS for your environment 
attach_file('file[picture]', 'path/to/file.png') # takes id, name or label text of field not a random selector 
+0

make_visible: true +1 –

2

Вы можете сделать что-то вдоль линий:

find('label[for=upload]').click 
attach_file('input[name="file[picture]"]'), 'path/to/file.png') 

within '.modal-popup' do 
    expect(page).to have_content '.divclass' 
end 
+1

Я вижу, что этот ответ был принят, но на самом деле он работал? Он может работать с драйвером полтергейста, но, вероятно, не будет с каким-либо другим, поскольку файл attach_file не будет взаимодействовать со скрытыми полями –

+0

@TomWalpole, вы абсолютно правы. Мне пришлось добавить строку 'Capybara.ignore_hidden_elements = false' в мой помощник rails, чтобы это работало. –

+1

Настройка @TomWalpole 'visible: false' не помогла –

4

Использование Capybara '2.7.1':

attach_file('file[picture]', 'path/to/file.png', visible: false) 
+1

Это работает без javascript (в отличие от опции make_visible) –

Смежные вопросы