2017-02-15 52 views
1

無法從pageObject傳遞值,回到規範驗證值是否符合預期的斷言語句。量角器 - 從pageObject傳遞元素值到規格

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)測試活動的儀表板按鈕點擊活動的標題應該採取的廣告系列報告 - 失敗:標題沒有定義

+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模型。你可以檢查並讓我知道它是否有效。但這就是它爲我工作的方式。 當您在單獨的文件中使用時,建議使用「原型」。