2016-06-27 9 views
3

Ich habe Eingang im Inneren des Etiketts versteckt:Wie Dateianhang auf versteckte Eingabe mit Capybara zu testen?

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

Wenn ich auf dem Etikett klicken, lege ich eine Datei und dann bestätigen.

Danach erscheint Modal-Fenster und ich muss geeignete Div-Klasse finden.

Wie kann ich dies mit Hilfe von Capybara testen?

Antwort

11

Update: Capybara 2.12 hinzugefügt, um eine make_visible Option attach_file so bei Verwendung von 2.12+ Sie zuerst

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

bevor sie direkt ausprobieren können mit execute_script selbst


Dateieingaben sind ein Sonderfall, da sie oft aus Stylinggründen ausgeblendet werden und ein modales System für die Interaktion verwenden. Capybara macht es schwer, in versteckten Feldern auf einer Seite zu füllen, weil Nutzer in der Regel nicht mit ihnen interagieren können, so dass für Datei-Eingänge normale Praxis execute_script zu benutzen, ist sie sichtbar zu machen und füllen sie dann in.

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

Sie können entlang der Linien von etwas tun:

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

Ich sehe diese Antwort wurde akzeptiert, aber hat es tatsächlich funktioniert? Es kann mit dem Poltergeist-Treiber funktionieren, aber wahrscheinlich würde es mit keinem anderen da attach_file nicht mit versteckten Feldern interagieren –

+0

@TomWalpole du hast absolut Recht. Ich musste "Capybara.ignore_hidden_elements = false" -Zeile zu meinem Rails-Helfer hinzufügen, damit dies funktioniert. –

+1

@TomWalpole Einstellung "sichtbar: falsch" war nicht hilfreich –

4

Verwendung Capybara '2.7.1':

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

Dies funktioniert ohne Javascript (im Gegensatz zur make_visible Option) –