Транспортир - Объекты
В этой главе подробно обсуждаются объекты в Транспортире.
Что такое объекты страницы?
Объект страницы - это шаблон проектирования, который стал популярным для написания тестов e2e для улучшения обслуживания тестов и уменьшения дублирования кода. Его можно определить как объектно-ориентированный класс, служащий интерфейсом для страницы вашего AUT (тестируемого приложения). Но, прежде чем углубляться в объекты страницы, мы должны понять проблемы, связанные с автоматическим тестированием пользовательского интерфейса, и способы их решения.
Проблемы с автоматическим тестированием пользовательского интерфейса
Ниже приведены некоторые общие проблемы с автоматизацией тестирования пользовательского интерфейса.
Изменения пользовательского интерфейса
Очень распространенные проблемы при работе с UI-тестированием - это изменения, происходящие в UI. Например, в большинстве случаев кнопки или текстовые поля и т. Д. Обычно меняются, что создает проблемы для тестирования пользовательского интерфейса.
Отсутствие поддержки DSL (доменного языка)
Еще одна проблема с тестированием пользовательского интерфейса - отсутствие поддержки DSL. С этой проблемой становится очень трудно понять, что именно тестируется.
Много повторений / дублирование кода
Следующая распространенная проблема при тестировании пользовательского интерфейса - это частое повторение или дублирование кода. Это можно понять с помощью следующих строк кода -
element(by.model(‘event.name’)).sendKeys(‘An Event’);
element(by.model(‘event.name’)).sendKeys(‘Module 3’);
element(by.model(‘event.name’));
Жесткое обслуживание
Из-за вышеуказанных проблем техническое обслуживание становится головной болью. Это потому, что мы должны найти все экземпляры, заменить их новым именем, селектором и другим кодом. Нам также нужно потратить много времени, чтобы тесты соответствовали рефакторингу.
Сломанные тесты
Еще одна проблема при тестировании пользовательского интерфейса - это множество ошибок в тестах.
Способы решения проблем
Мы видели некоторые общие проблемы тестирования пользовательского интерфейса. Вот некоторые из способов решения таких проблем:
Обновление ссылок вручную
Самый первый вариант решения вышеуказанных проблем - это обновить ссылки вручную. Проблема с этой опцией заключается в том, что мы должны вручную изменять код, а также наши тесты. Это можно сделать, если у вас есть один или два файла тестов, но что, если у вас есть сотни файлов тестов в проекте?
Использование объектов страницы
Другой вариант решения вышеуказанных проблем - использовать объекты страницы. Объект страницы - это в основном простой JavaScript, который инкапсулирует свойства шаблона Angular. Например, следующий файл спецификации написан без объектов страницы и с ними, чтобы понять разницу:
Without Page Objects
describe('angularjs homepage', function() {
it('should greet the named user', function() {
browser.get('http://www.angularjs.org');
element(by.model('yourName')).sendKeys('Julie');
var greeting = element(by.binding('yourName'));
expect(greeting.getText()).toEqual('Hello Julie!');
});
});
With Page Objects
Для написания кода с объектами страницы первое, что нам нужно сделать, это создать объект страницы. Следовательно, объект страницы для приведенного выше примера может выглядеть так:
var AngularHomepage = function() {
var nameInput = element(by.model('yourName'));
var greeting = element(by.binding('yourName'));
this.get = function() {
browser.get('http://www.angularjs.org');
};
this.setName = function(name) {
nameInput.sendKeys(name);
};
this.getGreetingText = function() {
return greeting.getText();
};
};
module.exports = new AngularHomepage();
Использование объектов страницы для организации тестов
В приведенном выше примере мы видели использование объектов страницы для решения задач тестирования пользовательского интерфейса. Далее мы собираемся обсудить, как мы можем использовать их для организации тестов. Для этого нам нужно изменить тестовый сценарий, не изменяя функциональность тестового сценария.
пример
Чтобы понять эту концепцию, мы берем вышеуказанный файл конфигурации с объектами страницы. Нам нужно изменить тестовый скрипт следующим образом -
var angularHomepage = require('./AngularHomepage');
describe('angularjs homepage', function() {
it('should greet the named user', function() {
angularHomepage.get();
angularHomepage.setName('Julie');
expect(angularHomepage.getGreetingText()).toEqual
('Hello Julie!');
});
});
Здесь обратите внимание, что путь к объекту страницы будет относиться к вашей спецификации.
В том же примечании мы также можем разделить наш набор тестов на различные наборы тестов. Затем файл конфигурации можно изменить следующим образом
exports.config = {
// The address of a running selenium server.
seleniumAddress: 'http://localhost:4444/wd/hub',
// Capabilities to be passed to the webdriver instance.
capabilities: {
'browserName': 'chrome'
},
// Spec patterns are relative to the location of the spec file. They may
// include glob patterns.
suites: {
homepage: 'tests/e2e/homepage/**/*Spec.js',
search: ['tests/e2e/contact_search/**/*Spec.js',
'tests/e2e/venue_search/**/*Spec.js']
},
// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
showColors: true, // Use colors in the command line report.
}
};
Теперь мы можем легко переключаться между запуском одного или другого набора тестов. Следующая команда запустит только раздел домашней страницы теста -
protractor protractor.conf.js --suite homepage
Точно так же мы можем запускать определенные наборы тестов с помощью следующей команды:
protractor protractor.conf.js --suite homepage,search