Канонический способ определения объектов страницы в Protractor

Мы уже давно используем шаблон Page Object. Это определенно помогает организовать сквозные тесты и делает тесты более читабельными и чистыми.

Как показано на странице документации Protractor Использование объектов страницы для организации тестов, мы определяем каждый объект страницы как функцию и используйте new для его создания:

"use strict";

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

module.exports = HeaderPage;

Использование:

"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);
    });

});

Но недавно в блоге Protractor: тестирование Angular стало проще. сообщение, я заметил, что объект страницы определяется как объект:

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);
    }
};

В чем разница между этими двумя способами представления объектов страницы? Должен ли я предпочесть одно другому?


person alecxe    schedule 17.07.2015    source источник
comment
Мы работаем над новым руководством по стилю. Он должен быть опубликован в ближайшее время.   -  person Andres D    schedule 17.07.2015


Ответы (2)


В конечном счете, я думаю, что это вопрос личных предпочтений.

Да, вы можете использовать шаблон конструктора и создавать экземпляр синглтона в каждом наборе тестов... да, вы можете использовать простой объектный литерал, как указано выше... да, вы можете использовать фабричную функцию...

Структурирование кода с использованием наследования через «классы» (будь то псевдо-синтаксис или синтаксис ES2015) по сравнению с объектами, расширенными с помощью миксинов, является гораздо более широкой дискуссией в разработке приложений в целом, не говоря уже о тестах e2e!

Главное — четкая, последовательная практика в ваших наборах тестов и поощрение возможности повторного использования кода везде, где это возможно.

person James Henry    schedule 12.10.2015

Алексей, у меня был такой же вопрос. Ответ для меня сводился к возможности расширять объекты страницы на основе конструктора. Для вещей, которые мне не нужно расширять (например, с помощью basePage), я использую литерал объекта.

Это основано только на том, что я читал и пробовал... Я был бы рад узнать о лучшем/другом шаблоне.

Я с нетерпением жду возможности прочитать руководство по стилю, Андрес.

person Brine    schedule 17.07.2015