Подтвердить что ты не робот

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

Мы довольно долго использовали Object 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 было сделано легко Сообщение Google Testing Blog, я заметил, что объект страницы определяется как объект:

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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