如何将外部库附加到量angular器configuration文件?

这是图书馆:

//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); }; 

这是我的configuration文件:

  //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文件中调用loginfn:

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

但是,上面的最后一行给我一个错误:'lib没有定义'

它看起来像你试图从你的library.js文件运行量angular器testing。

遵循http://www.protractortest.org/#/指导的准则,而不是这样做。 也就是说,config.js文件用于configuration环境,spec.js文件用于testing。 因此,请试试这个:

 /* * 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); }); }); 

configuration文件将如下所示:

 //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 } }; 

但是,如果您需要在每个testing之前或之前运行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行是如何replace你的行的。 另外我已经将exports.login更改为function login 。 那你就…

 var login = require('./login'); login('user', 'pass'); 

哪里需要。