2016-06-03 3 views
1

여기에 도서관 :돌출 라이브러리 설정 파일에 외부 라이브러리를 연결하는 방법은 무엇입니까?

//library.js 
var exports = module.exports = {}; 

exports.login = function(user_login, user_password) { 
    var input;  
    input = element(by.model('loginInfo.login')); 
    input.sendKeys(user_login); 
    expect(input.getAttribute('value')).toBe(user_login);  
    input = element(by.model('loginInfo.password')); 
    input.sendKeys(user_password); 
    expect(input.getAttribute('value')).toBe(user_password);   
    browser.sleep(1000); 
    browser.driver.actions().sendKeys(protractor.Key.ENTER).perform(); 
    browser.sleep(1000); 
}; 

그리고 이것은 내 설정 파일입니다

//config.js 
    var lib = require("./library.js"); 
    exports.config = { 
    directConnect: true, 
    onPrepare: function() { 
     browser.driver.manage().window().maximize(); 
    }, 

    // Capabilities to be passed to the webdriver instance. 
    capabilities: { 
    'browserName': 'chrome' 
    }, 

    // Framework to use. Jasmine is recommended. 
    framework: 'jasmine', 

    // Spec patterns are relative to the current working directory when 
    // protractor is called. 
    specs: ['messages.js'], 


    // Options to be passed to Jasmine. 
    jasmineNodeOpts: { 
    defaultTimeoutInterval: 50000 
    } 
}; 

그리고 여기가 messages.js 파일에 fn을 로그인 전화 했어 방법은 다음과 같습니다

lib.login('xxx', 'yyyyy'); 

그러나 위의 마지막 줄에 오류가 있습니다. 'lib is not defined'

답변

1

library.js 파일에서 분도기 테스트를 실행하려고하는 것 같습니다.

대신에 http://www.protractortest.org/#/ 지침에 따라 지침을 따르십시오. 즉, config.js 파일은 환경을 구성하기위한 것이며 spec.js 파일은 테스트 용입니다.

/* 
* library-spec.js 
*/ 

var input;  
describe('Login Test', function() { 
    it('should enter login information and send the Enter key to login', function() { 
     input = element(by.model('loginInfo.login')); 
     input.sendKeys(user_login); 
     expect(input.getAttribute('value')).toBe(user_login);  

     input = element(by.model('loginInfo.password')); 
     input.sendKeys(user_password); 
     expect(input.getAttribute('value')).toBe(user_password);   

     browser.sleep(1000); 
     browser.driver.actions().sendKeys(protractor.Key.ENTER).perform(); 
     browser.sleep(1000); 
    }); 

}); 

을 그리고 설정 파일은 다음과 같이 표시됩니다 : 따라서, 대신에 이것을 시도

//config.js 
exports.config = { 
    directConnect: true, 
    onPrepare: function() { 
     browser.driver.manage().window().maximize(); 
    }, 

    // Capabilities to be passed to the webdriver instance. 
    capabilities: { 
     'browserName': 'chrome' 
    }, 

    // Framework to use. Jasmine is recommended. 
    framework: 'jasmine', 

    // Spec patterns are relative to the current working directory when 
    // protractor is called. 
    specs: ['library-spec.js'], 


    // Options to be passed to Jasmine. 
    jasmineNodeOpts: { 
     defaultTimeoutInterval: 50000 
    } 
}; 

그러나 library.js 파일이 각각 전이나 모든 테스트 전에 실행되는 것을 필요로하는 경우, messages.js 파일에 넣으십시오. 당신의 messages.js 파일에서

, 당신의 describe 블록 내에서 추가합니다 :

beforeEach(function() { 
    lib(username, password); //where username and password are string vars 
}); 

또는

beforeAll(function() { 
    lib(username, password); //where username and password are string vars 
}); 

그리고, 마지막 참고로, 당신은 당신의 library.js가 그대로 파일을 떠날 경우, 다음은 몇 가지 정리입니다.

//library.js 
module.exports = login; 

function login(user_login, user_password) { 
    var input;  
    input = element(by.model('loginInfo.login')); 
    input.sendKeys(user_login); 
    expect(input.getAttribute('value')).toBe(user_login);  
    input = element(by.model('loginInfo.password')); 
    input.sendKeys(user_password); 
    expect(input.getAttribute('value')).toBe(user_password);   
    browser.sleep(1000); 
    browser.driver.actions().sendKeys(protractor.Key.ENTER).perform(); 
    browser.sleep(1000); 
}; 

어떻게 module.exports lin e는 당신이 가진 라인을 대체합니다. 또한 exports.login을 function login으로 변경했습니다. 그렇다면 ...

var login = require('./login'); 

login('user', 'pass'); 

어디서 필요한가?

+0

아니요, library.js는 테스트 스크립트가 아니며 여러 스크립트에 사용하려는 일반적인 메소드가있는 라이브러리입니다. 내가 찾고자하는 것은 이러한 방법을 사용하는 방법이지만, 어떻게 호출해야하는지 모르겠습니다. Conf.js는 라이브러리가 아닌 테스트 스크립트를 호출해야합니다. – user3400351

+0

알겠습니다.이 대답의 후반부를 따르십시오. 간단히'var library = require ('library')();'그런 다음 라이브러리에서 메소드를 library.login()으로 호출 할 수 있습니다. 내가 주말에 쓴이 블로그 게시물을 보면 도움이 될 것입니다. http://www.assertselenium.com/angularjs/protractor-jasmine-pre-post-processing-methods/ – Machtyn

+0

나는 "할 일"이 예상되는 라이브러리에'expect' 문을 넣지 않을 것을 제안합니다. 기대 사양을 실제 사양 테스트에 그대로 둡니다. 즉, 구체적으로 로그인을 테스트하는 spec.js 파일이 있어야합니다. 그러나 로그인 라이브러리는 무료로 제공되지만 로그인은 이전에 테스트되었으므로 단순히 로그인하기위한 테스트를 반복 할 필요가 없습니다. – Machtyn

관련 문제