2014-06-26 16 views
10

Sto eseguendo test front-end utilizzando nightwatch.js utilizzando il driver Chrome. Ho bisogno di testare che il caricamento delle immagini funzioni correttamente, presumibilmente attraverso l'input di file fornito poiché ci sono callback che funzionano su un post di successo.Caricamento di un file immagine con Nightwatch.js

Sono consapevole che ciò può essere fatto utilizzando il metodo sendKeys del Selenium Web Driver.

Come si può realizzare questo utilizzando javascript e nightwatch.js? È possibile accedere al web driver Selenium o ad un'interfaccia con esso?

+0

Sarei interessato a vedere come viene selezionato un file, non pensavo che una cosa del genere fosse possibile. – dandavis

risposta

7

Utilizzare questo per caricare un'immagine dal desktop locale

.setValue('input[type="file"]', require('path').resolve('/home/My-PC/Desktop/img.png')) 
1

Utilizzare la funzione client.setValue per impostare il percorso assoluto dell'immagine. Ecco l'esempio funzionante nel mio progetto.

client.setValue ('# editPictures .modal-body input [type = "file"]', '/Users/testing/pictures/CAM00003.jpg');

2

Come menzionato da qualcuno sopra, è possibile passare il percorso assoluto al proprio input [tipo = "file"] come se si stesse digitando del testo in un campo.

Questa funzione utilizza la funzione setValue di Nightwatch. È possibile recuperare il percorso della directory corrente utilizzando la variabile globale __dirname del nodo.

Ad esempio: .setValue('#upload-input', __dirname + '\\upload.jpg')

+0

Potresti approfondire il motivo per cui hai inserito il doppio backslash, dopo '' '__dirname'''? Cheers – GrayedFox

+1

@grayedfox: il backslash è un carattere di escape per precedere i caratteri speciali. In questo esempio, si sta eseguendo l'escape di una barra rovesciata (char speciale che si desidera utilizzare) con una barra rovesciata (il carattere di escape che denota il seguente carattere deve essere interpretato letteralmente). – lacy

1

Nel mio caso c'è un div con id = "Carica icona", che ha in ingresso con il tipo di file = " "

.setValue('//div[@id="Upload Icon"]/input[@type="file"]', require('path').resolve(__dirname + '/categoryIcon.png')) 

Il codice sopra funziona bene per me.