5

Ho bisogno di scrivere più test (ad esempio, test di accesso, uso dell'applicazione una volta eseguito il test, test di logout, ecc.) E ho bisogno che tutti siano in file separati. Il problema che ho riscontrato è dopo ogni test, all'inizio del test successivo in esecuzione, una nuova sessione del browser inizia e non è più loggato a causa della nuova sessione, quindi tutti i miei test non andranno a buon fine tranne il test di accesso.Riutilizzare la sessione del browser per Selenium WebDriver per i test di Nightwatch.js

Quindi, c'è un modo per utilizzare la stessa sessione del browser per eseguire tutti i miei test in sequenza senza dover duplicare il mio codice di accesso? Scusate se si tratta di un repost ma ho cercato e ricercato e non ho trovato alcuna risposta.

O, c'è un modo per concatenare i file di test in qualche modo? Come avere un file che si esegue che chiama solo tutti gli altri file di test?

+0

Non ho familiarità con Nightwatch.js ma ho familiarità con il problema della sessione di accesso/uscita con casi di test del selenio. Suggerirei di dare un'occhiata ai [tag di prova del nightwatch] (http://nightwatchjs.org/guide#test-tags) e/o ai [ganci di prova] (http://nightwatchjs.org/guide#setup-teardown) trovato sotto che nella documentazione. –

risposta

8

Con questa funzione di concatenare i file:

extend = function(target) { 
    var sources = [].slice.call(arguments, 1); 
    sources.forEach(function (source) { 
     for (var prop in source) { 
      target[prop] = source[prop]; 
     } 
    }); 
    return target; 
} 

e l'aggiunta di file a questo master file in questo modo:

require("./testName.js"); 
module.exports = extend(module.exports,testName); 

e avere l'aspetto file di test in questo modo:

testName = { 
    "Test" : function(browser) { 

     browser 
      // Your test code 
    } 
}; 

mi ha permesso di avere un file in grado di collegare tutti i test e mantenere la stessa sessione del browser per tutto il tempo. Esegue i test nell'ordine in cui sono richiesti nel file master e, se non chiami browser.end() fino a quando l'ultimo test è terminato, utilizzerà una finestra del browser per tutti i test.

+0

non interromperà la funzionalità del tag? – SgtPooki

3

Riutilizzo della sessione non è una buona idea in quanto è possibile eseguire test in diversi oreder, ma È possibile inserire il codice di accesso in prima funzione o addirittura estrarlo in comandi personalizzati.

Esempio: https://github.com/dimetron/backbone_app/blob/master/nightwatch/custom-commands/login.js

1 - In config Nightwatch aggiungere

"custom_commands_path" : "nightwatch/custom-commands", 

2 - Creare personalizzati-comandi/login.js

exports.command = function(username, password, callback) { 
    var self = this; 
    this 
     .frame(null) 
     .waitForElementPresent('input[name=username]', 10000) 
     .setValue('input[name=username]', username) 
     .waitForElementPresent('input[name=password]', 10000) 
     .setValue('input[name=password]', password) 
     .click('#submit'); 

    if(typeof callback === "function"){ 
     callback.call(self); 
    } 
    return this; // allows the command to be chained. 
}; 

3 - Codice di prova - Prima di utilizzare. login (utente, apssword)

module.exports = { 

    before: function(browser) { 
    console.log("Setting up..."); 
    browser 
     .windowSize('current', 1024, 768) 
     .url("app:8000/") 
     .waitForElementVisible("body", 1000) 
     .login('user', 'password') 
    }, 

    after : function(browser) { 
    browser.end() 
    console.log("Closing down..."); 
    }, 

    beforeEach: function(browser) { 
    browser 
     .pause(2000) 
     .useCss() 
    }, 

    "Test 1": function(browser) { 
    browser 
     .assert.containsText("#div1", "some tex") 
     .pause(5000); 
    }, 

    "Test 2": function(browser) { 
    browser 
     .assert.containsText("#div2", "some text") 
     .pause(5000); 
    } 
} 
+0

Gli accessi multipli non sono ancora necessari e perdi molto tempo per le suite con un numero elevato di test ... a meno che l'appstate sia effettivamente diverso tra ogni accesso, il che significa che hai problemi più grandi. – SgtPooki

Problemi correlati