【问题标题】:How to attach an external library to Protractor config file?如何将外部库附加到量角器配置文件?
【发布时间】:2016-10-04 01:19:32
【问题描述】:

这是图书馆:

//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'

【问题讨论】:

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


    【解决方案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'); 
    

    需要它的地方。

    【讨论】:

    • 不,library.js 不是测试脚本,它是一个包含常用方法的库,我想将其用于多个脚本。我想找到一种使用这些方法的方法,但我不知道如何/在哪里调用它们。 Conf.js 必须调用测试脚本,而不是库。
    • 好的,然后按照这个答案的后半部分。只需var library = require('library')(); 然后你可以从库中调用你的方法为library.login()。请参阅我在周末写的这篇博客文章,它应该可以帮助你。 assertselenium.com/angularjs/…
    • 我还建议不要将 expect 语句放入您的库中,这些语句预计会“做一些事情”。将期望语句留给您的实际规范测试。也就是说,有一个专门测试登录的 spec.js 文件。但是让您的登录库保持免费,但假设登录是先前测试过的,无需重复测试即可简单登录。
    猜你喜欢
    • 2015-05-12
    • 2020-07-22
    • 2015-01-24
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2020-02-04
    • 2015-07-04
    • 2015-06-01
    相关资源
    最近更新 更多