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

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

最佳答案

您似乎正在尝试从library.js 文件运行 Protractor 测试。

不要这样做,而是遵循 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 block 中添加:

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更改为功能登录。那么你会...

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

login('user', 'pass'); 

哪里需要它。

关于javascript - 如何将外部库附加到 Protractor 配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37623444/

相关文章:

javascript - html onresizeend 事件,或检测调整大小结束的等效方法

javascript - 使用 Node.js 和 Mailgun 发送 HTML 时遇到问题

javascript - 根据文本更改下拉列表中选项的顺序

node.js - 通过 RTM 私信 Slack 用户

node.js - 如何将加密添加到 Nodejs 构建中?

javascript - 如何添加固定工具栏 snap.js

javascript - 隐藏时清除 fieldGroup 的字段

javascript - 为什么我的发帖请求处于待处理状态?

javascript - 是否有理由使用 __proto__ 而不是 setPrototypeOf

javascript - AngularJS/ChartJS : Get the current series