Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将外部库附加到量角器配置文件?_Javascript_Angularjs_Node.js_Protractor_Automated Tests - Fatal编程技术网

Javascript 如何将外部库附加到量角器配置文件?

Javascript 如何将外部库附加到量角器配置文件?,javascript,angularjs,node.js,protractor,automated-tests,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('val

这是图书馆:

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

看起来您正在尝试从library.js文件运行量角器测试

与其这样做,不如遵循指导原则。也就是说,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
文件中,在
description
块中添加:

beforeEach(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更改为
函数login
。那么你会

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

login('user', 'pass'); 

需要的地方。

不,library.js不是一个测试脚本,它是一个包含常用方法的库,我想用于几个脚本。我想找到一种使用这些方法的方法,但我不知道如何/在哪里调用它们。Conf.js必须调用测试脚本,而不是库。简单地
var-library=require('library')()
然后您可以从库中调用方法作为
library.login()
。看看我在周末写的这篇博客文章,它应该会帮助你。我还建议不要将
expect
语句放在您的库中,这些语句被期望“做一些事情”。将expect语句留给实际的规范测试。也就是说,有一个spec.js文件专门测试登录。但是让您的登录库expect免费,但假设登录之前已经过测试,只需登录就无需重复测试。
var login = require('./login');

login('user', 'pass');