如何将Protractor Page Object或spec文件中的某些函数重构为单独的文件?

时间:2015-03-26 21:30:19

标签: angularjs protractor

对于PageObject,我们在页面底部有按钮/链接。我们必须向下滚动到底部才能点击。

var ContactAddPage = function() {
    ...
    this.btnAdd = element(by.id('btnAdd'));

    this.add = function() {
        scrollToBottom();
        this.btnAdd.click();
    };

    function scrollToBottom(){
        browser.executeScript('window.scrollTo(0,10000);');
    }
};

由于scrollToBottom()将在许多其他页面对象中使用,我假设我们可以将它重构为分隔符文件,并以某种方式require()将其重构到页面对象中。但是怎么做呢?


对于规范文件,会有一些常见的功能,例如在beforeAll()中使用不同的角色登录并在afterAll()中注销。检查网址对每个网页也很常见:

function loginAs(role) {
    var loginPage = new LoginPage();
    loginPage.login(role);
}

function logOut() {
    var lnkLogOff = element(by.linkText('Log off'));
    if (element(by.linkText('Log off')).isPresent()) lnkLogOff.click();
}

function expectRouteToBe(expectUrl) {
    expect(browser.getCurrentUrl()).toBe(browser.baseUrl + expectUrl);
}

同样的问题:将它们移出的正确方法是什么?require()它们回来了?

2 个答案:

答案 0 :(得分:1)

我们在量角器e2e测试中有类似的东西。我们为测试中使用的可重用功能创建了一组辅助库。

示例:

  • 创建helpers.js文件:

    var Helpers = function() {
        this.scrollToBottom = function () {
            browser.executeScript('window.scrollTo(0,10000);');
        };
    };
    
    module.exports = new Helpers();
    
  • 要求并在您的Page Object中使用它:

    var helpers = require("./helpers.js");
    
    var ContactAddPage = function() {
        this.btnAdd = element(by.id('btnAdd'));
    
        this.add = function() {
            helpers.scrollToBottom();
            this.btnAdd.click();
        };
    };
    
    module.exports = ContactAddPage;
    

答案 1 :(得分:1)

您可以使用导出和原型继承扩展模块...然后您可以在任何或所有页面中使用方法。例如。类似的东西:

basePage.js:

var BasePage = function() {
    this.loginAs = function(role) {
        this.login(role);
    };

    ...
};
module.exports = new BasePage();

然后扩展任意数量的页面:

var basePage = require('./basePage.js');

var MainPage = function() {
    this.btnAdd = element(by.id('btnAdd'));

    this.add = function() {
        this.scrollToBottom();
        this.btnAdd.click();
    };

    this.scrollToBottom = function() {
        browser.executeScript('window.scrollTo(0,10000);');
    };
};
MainPage.prototype = basePage;
module.exports = new MainPage();

然后在您的规范中,您可以:

var mainPage = require("../pages/mainPage.js");

...
it('should login and click add', function() {
    mainPage.loginAs(role);
    mainPage.btnAdd.click()
    ...
});

希望有帮助...