5

Potrzebuję napisać wiele testów (np. Test logowania, skorzystaj z aplikacji po zalogowaniu się, test wylogowania itp.) I potrzebujesz ich wszystkich w osobnych plikach. Problem, który napotkam, jest po każdym teście, na początku następnego testu, rozpoczyna się nowa sesja przeglądarki i nie jest już zalogowany ze względu na nową sesję, więc wszystkie moje testy zakończą się niepowodzeniem, z wyjątkiem testu logowania.Ponownie użyj sesji przeglądarki dla Selenium WebDriver dla testów Nightwatch.js

Czy istnieje sposób na wykorzystanie tej samej sesji przeglądarki do sekwencyjnego uruchamiania wszystkich moich testów bez konieczności kopiowania mojego kodu logowania? Przepraszam, jeśli jest to repost, ale przeszukaliśmy i przeszukaliśmy i nie znaleźliśmy żadnych odpowiedzi.

OR, czy jest jakiś sposób na połączenie plików testowych w jakiś sposób? Podobnie jak przy uruchamianiu jednego pliku, który wywołuje wszystkie inne pliki testowe?

+0

Nie jestem zaznajomiony z Nightwatch.js, ale jestem zaznajomiony z problemem sesji logowania/wylogowania z przypadkami testowymi selenu. Proponuję rzucić okiem na [znaczniki testu nocnego zegarka] (http://nightwatchjs.org/guide#test-tags) i/lub [haki testowe] (http://nightwatchjs.org/guide#setup-teardown) znalezione poniżej w dokumentacji. –

Odpowiedz

8

Korzystanie z tej funkcji łańcucha razem pliki:

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

i dodawanie plików do tego pliku nadrzędnego jak ten:

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

i mający wygląd pliku testowego takiego:

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

     browser 
      // Your test code 
    } 
}; 

pozwoliło mi mieć jeden plik, który może łączyć wszystkie testy i utrzymywać tę samą sesję przeglądarki przez cały czas. Przeprowadza testy w kolejności, w jakiej są wymagane w pliku głównym, a jeśli nie wywołasz funkcji browser.end() do ostatniego testu, to będzie używać jednego okna przeglądarki dla wszystkich testów.

+0

czy to nie przełamie funkcjonalności znacznika? – SgtPooki

3

Ponowne użycie sesji nie jest dobrym pomysłem, ponieważ możesz przeprowadzać testy u różnych użytkowników, ale Możesz umieścić kod logowania przed funkcją lub nawet wyodrębnić ją do własnych poleceń.

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

1 - w konfiguracji NightWatch dodać

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

2 - Tworzenie własnych komend/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 - kod Test - przed użyciem. login (użytkownik, słowo)

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

Wielokrotne logowanie jest niepotrzebne i marnuje dużo czasu w przypadku pakietów z dużą liczbą testów ... chyba że stan Twojej aplikacji faktycznie różni się pomiędzy poszczególnymi loginami, co oznacza, że ​​masz większe problemy. – SgtPooki