5

여러 테스트 (예 : 로그인 테스트, 테스트에 로그인 한 응용 프로그램 사용, 로그 아웃 테스트 등)를 작성하고 모두 별도의 파일로 작성해야합니다. 테스트를 마친 후 다음 테스트가 시작될 때마다 새 브라우저 세션이 시작되고 더 이상 새 세션으로 인해 로그인되지 않으므로 모든 테스트가 로그인 테스트를 제외하고 실패합니다.Nightwatch.js 테스트 용 Selenium WebDriver 용 브라우저 세션 재사용

로그인 코드를 복제하지 않아도 동일한 브라우저 세션을 사용하여 모든 테스트를 순차적으로 실행할 수 있습니까? 이 게시물은 재 게시가되었지만 검색 및 조사를 통해 답변을 찾지 못해 죄송합니다.

또는 어떻게 든 테스트 파일을 연결하는 방법이 있습니까? 하나의 파일을 실행하는 것처럼 다른 모든 테스트 파일을 호출합니까?

+0

Nightwatch.js에 익숙하지 않지만 셀렌 테스트 케이스의 로그인/로그 아웃 세션 문제에 익숙합니다. [nightwatch 테스트 태그] (http://nightwatchjs.org/guide#test-tags) 및/또는 [테스트 후크] (http://nightwatchjs.org/guide#setup-teardown)를 살펴 보시기 바랍니다.) 아래에있는 문서를 참조하십시오. –

답변

8

함께 체인이 함수를 사용하여 파일 :

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

이 등이 마스터 파일에 파일을 추가 :

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

이 같은 테스트 파일을보고 갖는

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

     browser 
      // Your test code 
    } 
}; 

을 사용하면 모든 테스트를 링크 할 수있는 하나의 파일을 가질 수 있었으며 전체 브라우저 세션을 동일하게 유지할 수있었습니다. 마스터 파일에서 필요한 순서로 테스트를 실행하고 마지막 테스트가 끝날 때까지 browser.end()를 호출하지 않으면 모든 테스트에 대해 하나의 브라우저 창이 사용됩니다.

+0

태그 기능을 중단하지 않습니까? – SgtPooki

3

다른 oreder에서 테스트를 실행할 수 있으므로 세션을 다시 사용하는 것은 좋지 않지만 로그인 코드를 함수 앞에 배치하거나 사용자 정의 명령으로 추출 할 수도 있습니다.

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

1 -/사용자 정의 명령을 작성

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 login.js - - nightwatch 설정에서

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

이 추가 테스트 코드를 - 사용하기 전에. 로그인 (사용자, 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

여러 로그인은 여전히 ​​불필요하며 많은 수의 테스트를 거친 스위트에 많은 시간을 낭비합니다 ... 각 로그인간에 appstate가 실제로 다르면 더 큰 문제가 있음을 의미합니다. – SgtPooki

관련 문제