Объекты страницы в AngularJS Protractor E2E Testing

Каков правильный способ обработки модели объектов объектов для написания теста Protractor E2E для AngularJS? Я чувствую, что должен писать их в отдельных файлах (например, homepage.js, page2.js и т.д.), А затем включать их как можно скорее в спецификации, такие как модули. Однако я не знаю, как их вводить. По достоинству оценят любые предложения. Спасибо!

Ответ 2

Вы пробовали с астролябом? Это реализация PageObject поверх Protractor, которая может направить вашу структуру: https://github.com/stuplum/astrolabe

Здесь вы можете увидеть, что рекомендуемая структура - это один объект страницы на файл.

Например: singInPage.js

var Page = require('astrolabe').Page;

module.exports = Page.create({

   url: { value: 'http://<somesite>.com/signin' },

   username: { get: function() { return this.findElement(this.by.input('username')); } }, // finds an input element with the name 'username'
   submit:   { get: function() { return this.findElement(this.by.id('submit')); } }       // finds an element with the id 'submit'
});

он делает запись тестовых примеров и даже объектов страницы очень компактными и читаемыми.

Ответ 3

Вы должны хранить их в отдельных файлах, да.

И в вашем транспортнике referenceConf.js(config для запуска транспортира с) вы должны написать:

specs: ['<your_path>/test/pages/*Test.js']

В этом случае < protractor запустит все файлы из dir "/test/pages" с помощью маски * Test.js (loginPageTest.js, homePageTest.js)

Ответ 4

Я боюсь, что нет обычных стандартов, когда дело доходит до тестирования с объектами страницы. Вы можете найти несколько предложений среди проблем с транспортиром: https://github.com/angular/protractor/issues/401 и https://github.com/angular/protractor/issues/78

Для моих нужд я создал очень простые объекты страницы в моем проекте с открытым исходным кодом, см.: https://github.com/9ci/angle-grinder/pull/124

Также довольно интересная реализация вы можете найти в https://github.com/juliemr/ng-page-e2e/tree/master/test