Транспортир - передача значения элемента из 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);
Другие вопросы по тегам