量角器 - 将元素值从pageObject传递到spec

时间:2017-02-15 19:14:28

标签: javascript angularjs protractor

在从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)测试广告系列信息中心按钮点击广告系列标题应该转到广告系列报告    - 失败:标题未定义

2 个答案:

答案 0 :(得分:0)

请勿使用括号表示法从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);

答案 1 :(得分: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模型。你可以检查并告诉我它是否有效。但这就是它对我有用的方式。 当您在单独的文件中使用时,建议使用'prototype'。