Транспортир - передача значения элемента из pageObject в spec
Возникают проблемы при передаче значения из pageObject, обратно в спецификацию, чтобы проверить, соответствует ли значение ожидаемому утверждению assert.
pageObject.js
this.CampaignTitle = function() {
element.all(by.repeater('campaign in campaigns')).then(function(campaigns) {
var title = campaigns[0].element(by.className('campaign-title'));
title.click();
return title;
});
}
spec.js
it('Clicking on campaign title should take to campaign report', function() {
dashboardPage.CampaignTitle();
expect(dashboardPage.CampaignTitle().getText()).toContain(browser.params.campaignTitle);
});
Я получаю ошибку
1) Тестирование кнопок панели инструментов кампании. При нажатии на заголовок кампании должен появиться отчет о кампании. - Ошибка: невозможно прочитать свойство 'getText' из неопределенного
Или если я добавлю заголовок к
expect(dashboardPage.CampaignTitle(title).getText()).toContain(browser.params.campaignTitle);
я получил
1) Тестирование кнопок панели инструментов кампании. Нажатие на заголовок кампании должно привести к отчету кампании - Ошибка: заголовок не определен
2 ответа
@theHussle, я надеюсь, что приведенная ниже реализация должна работать.
pageObject.js
function DashboardPage(){}
DashboardPage.prototype.clickCampaign = function(repeaterName, className, expectedValue, index){
if(!index){
index = 0;
}
var titleElement = element.all(by.repeater(repeaterName)).get(index).element(by.className(className));
<if you want you can add some wait to get that element>
if(expectedValue){
titleElement.getText().then(function(text){
expect(text).toContain(expectedValue);
});
}
<if you want you can return titleElement>
};
module.exports = new DashboardPage();
spec.js
var dashBoardPage = require('../pageObject.js');
var repeaterName = 'campaign in campaigns';
var className = 'campaign-title';
var expectedValue = browser.params.campaignTitle;
var index = 0;
<in your test case>
it('Clicking on campaign title should take to campaign report', function(){
dashBoardPage.campaignTitle();
});
Я настроил код для лучшего понимания, а также для лучшей реализации модели pageObject. Вы можете проверить и сообщить мне, работает ли он. Но вот как это работает для меня. Использование "прототипа" рекомендуется при использовании в отдельных файлах.
Не используйте скобочные обозначения для извлечения элемента из ElementArrayFinder, используйте .get (). Также я бы реализовал это немного по-другому, вы можете сделать это без использования .then()
;
this.CampaignTitle = function() {
var title = element.all(by.repeater('campaign in campaigns')).get(0).element(by.className('campaign-title'));
return title;
}
spec.js
dashboardPage.CampaignTitle().click();
expect(dashboardPage.CampaignTitle().getText()).toContain(browser.params.campaignTitle);