2017-02-15 7 views
1

Не удалось передать значение из объекта 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) Тестирование кампании приборная панель кнопок Нажатие на название кампании следует принять к кампании отчет - Failed: название не определено

+0

Пара вопросов, чтобы узнать ваш код 1. Где вы определили сообщения [0]? 2. Почему вы проводите кампании, чтобы функционировать, поскольку она не используется нигде в функции? –

+0

Извините исправлено. Я просто хочу получить возвращаемое значение. – theHussle

ответ

0

Дон» t использовать скобку для извлечения элемента от 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); 
+0

Эй, бутон, все еще получаю ошибку, связанную с - Ошибка: dashboardPage.campaignTitle не является функцией, которая действительно расстраивает то, как она не предоставляет больше информации, насколько я могу сказать, что это функция! – theHussle

+0

У вас есть другие функции под 'dashboardPage', которые действительно работают? Возможно, вы не импортируете/экспортируете правильно. Можете ли вы обновить свой вопрос, как создать объект 'dashboardPage' и как его экспортировать? – Gunderson

+0

Кроме того, я сомневаюсь, что это проблема, потому что она должна обрабатываться одинаково, но обычные функции начинаются с буквы в нижнем регистре, а конструкторы начинаются с прописной буквы. Поэтому, возможно, попробуйте 'var DashboardPage = function() ...' и 'this.campaignTitle = function() ...' – Gunderson

0

@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. вы можете проверить и сообщить мне, работает ли это. Но так оно и работает для меня. Использование «прототипа» рекомендуется при использовании в отдельных файлах.