2014-09-18 2 views
7

Vorrei riaprire la domanda posta here e here per testare il caricamento di file in Nightwatch.js che utilizza il selenio.Test caricamento file in Nightwatch.js

Entrambi i collegamenti hanno la soluzione consigliata di impostare il valore dell'elemento di input del file come url. Nel mio caso d'uso, non sono riuscito a farlo funzionare. Anche impostando manualmente il tag value, fuori da nightwatch, dell'input dove type="file", non viene modificato l'URL. Ho provato questo su Chrome, Firefox e IE10, all'interno degli strumenti di sviluppo.

Una soluzione alternativa che ho visto stava cercando di emulare l'intero processo di caricamento dei file. Questo seguirà il percorso di fare clic sul pulsante di caricamento del file, digitando il percorso e digitando Invio. Ciò avverrebbe tramite i metodi .click e .key. Tuttavia, si perde la messa a fuoco della finestra di caricamento del file effettivo, che ritarda le sequenze di tasti fino alla chiusura di tale finestra. Altri sviluppatori sembravano essere in grado di risolvere questa soluzione direttamente in selenio usando i metodi .findElement e .sendKeys in java, ma non riuscivo a capire come farlo all'interno di javascript e nightwatch stesso.

Qualche idea?

// My test 
     module.exports = { 
     "Standard File Upload" : function (browser) { 
     browser 
      .url("http://localhost:3000") 
      .waitForElementVisible('body', 1000) 
      .waitForElementVisible('input[type="file"]', 1000) 
      .setValue('input[type="file"]','http://localhost:3000/testfile.txt') 
      .click('#submit') 
      .pause(1000) 
      .assert.containsText('h3', 'File Uploaded Successfully') 
      .end(); 
     } 
    }; 

// http://localhost:3000/testfile.txt was tested manually in the file upload window and worked successfully 

<!-- My input tag --> 
<input id="fileUpload" type="file" name="textfile"/> 

risposta

13

C'erano due problemi separati con la mia implementazione setValue() metodo.

  1. Utilizzando il tag --verbose nel comando Nightwatch mi ha portato a un problema dove non era in realtà trovare il tag input durante la setValue(), ma è stato durante la waitForElementVisible(). Modifica a input#fileUpload risolto questo problema .

  2. In secondo luogo, i seguenti modi di descrivere il percorso non funzionavano ...

    • 'textfile.txt'
    • 'http://localhost:3000/testfile.txt' (funziona se digitato manualmente nella finestra di caricamento di file)


    Che cosa ha funzionato utilizzando require('path').resolve(__dirname + '/testfile.txt')


Dai uno sguardo allo here per vedere la discussione che ha portato alla correzione. Grazie va a richard-flosi.

Il codice di lavoro:

module.exports = { 
    "Standard File Upload" : function (browser) { 
    browser 
     .url("http://localhost:3000") 
     .waitForElementVisible('body', 1000) 
     .waitForElementVisible('input#fileUpload', 1000) 
     .pause(1000) 
     .setValue('input#fileUpload', require('path').resolve(__dirname + '/testfile.txt')) // Works 
//  .setValue('input#fileUpload', "testfile.txt") // Will not work 
//  .setValue('input#fileUpload', "http://localhost:3000/testfile.txt") // Will not work 
//  .setValue('input[type="file"]', require('path').resolve(__dirname + '/testfile.txt')) // Will not work 
     .click('#submit') 
     .pause(1000) 
     .assert.containsText('h3', 'File Uploaded Successfully') 
     .end(); 
    } 
}; 
+0

Vedo che questa risposta è stata pubblicata molto tempo fa, ma forse potresti aiutarmi con il file, che è stato pubblicato su s3. Ho bisogno di gestire il caso quando il percorso del file è come '' https: //..../ file.zip''. Ma come digitare questo percorso nella finestra di caricamento del file? – MisterMe

0

io non sono sicuro perché si hanno questi problemi, forse controllare per vedere se si sta utilizzando la versione più recente del server di selenio e Nightwatch. Questo codice funziona per me al 100% in Chrome, Safari, Firefox, IE7/8/9/10/11 (non testato in IE6 ma lo suppongo anche).

driver.setValue('input#fileUpload', __dirname + '\\testfile.txt')