如何将外部库附加到Protractor配置文件?

时间:2016-06-03 21:08:42

标签: javascript angularjs node.js protractor automated-tests

这是图书馆:

//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未定义”

1 个答案:

答案 0 :(得分: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行如何替换您拥有的行。我还将exports.login更改为function login。然后你会...

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

login('user', 'pass'); 

需要的地方。