在Protractor中定义页面对象的规范方法

ale*_*cxe 13 javascript testing pageobjects angularjs protractor

我们一直在使用Page Object模式.它绝对有助于组织端到端测试并使测试更具可读性和清洁性.

由于使用页面对象来组织测试的量角器文档页面告诉我们,我们定义每一页对象作为一个功能及使用方法new为"实例"吧:

"use strict";

var HeaderPage = function () {
    this.logo = element(by.css("div.navbar-header img"));
}

module.exports = HeaderPage;
Run Code Online (Sandbox Code Playgroud)

用法:

"use strict";

var HeaderPage = require("./../po/header.po.js");

describe("Header Look and Feel", function () {
    var header;

    beforeEach(function () {
        browser.get("/#login");
        header = new HeaderPage();
    });

    it("should show logo", function () {
        expect(header.logo.isDisplayed()).toBe(true);
    });

});
Run Code Online (Sandbox Code Playgroud)

但是,最近在量角器:角度测试变得简单的谷歌测试博客帖子,我注意到页面对象被定义为一个对象:

var angularHomepage = {
    nameInput : element(by.model('yourName')),
    greeting : element(by.binding('yourName')),
    get : function() {
        browser.get('index.html');
    },
    setName : function(name) {
        this.nameInput.sendKeys(name);
    }
};
Run Code Online (Sandbox Code Playgroud)

这两种引入页面对象的方法有什么区别?我应该更喜欢另一个吗?

Jam*_*nry 3

归根结底,我认为这是个人喜好的问题。

是的,您可以使用构造函数模式并在每个测试套件中实例化一个单例...是的,您可以使用上面的简单对象文字...是的,您可以使用工厂函数...

一般来说,通过“类”(无论是伪语法还是 ES2015 语法)使用继承与通过 mixins 扩展的对象来构建代码是应用程序开发中更广泛的争论,更不用说 e2e 测试了!

最重要的是跨测试套件的清晰、一致的实践,并尽可能提高代码的可重用性。