Javascript 量角器-将元素值从pageObject传递到等级库

Javascript 量角器-将元素值从pageObject传递到等级库,javascript,angularjs,protractor,Javascript,Angularjs,Protractor,如果无法从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-titl

如果无法从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;
        });
    }
规格js

it('Clicking on campaign title should take to campaign report', function() {
    dashboardPage.CampaignTitle();
    expect(dashboardPage.CampaignTitle().getText()).toContain(browser.params.campaignTitle);
});
dashboardPage.CampaignTitle().click();
expect(dashboardPage.CampaignTitle().getText()).toContain(browser.params.campaignTitle);
我得到的错误是

1) 测试活动仪表板按钮单击活动标题应显示在活动报告中 -失败:无法读取未定义的属性“getText”

或者如果我把标题添加到

  expect(dashboardPage.CampaignTitle(title).getText()).toContain(browser.params.campaignTitle);
我明白了

1) 测试活动仪表板按钮单击活动标题应显示在活动报告中
-失败:未定义标题

不要使用括号符号从中检索元素,请使用。另外,我将以稍微不同的方式实现这一点,您可以不用使用
。then()

规格js

it('Clicking on campaign title should take to campaign report', function() {
    dashboardPage.CampaignTitle();
    expect(dashboardPage.CampaignTitle().getText()).toContain(browser.params.campaignTitle);
});
dashboardPage.CampaignTitle().click();
expect(dashboardPage.CampaignTitle().getText()).toContain(browser.params.campaignTitle);

不要使用括号表示法从中检索元素,请使用。另外,我将以稍微不同的方式实现这一点,您可以不用使用
。then()

规格js

it('Clicking on campaign title should take to campaign report', function() {
    dashboardPage.CampaignTitle();
    expect(dashboardPage.CampaignTitle().getText()).toContain(browser.params.campaignTitle);
});
dashboardPage.CampaignTitle().click();
expect(dashboardPage.CampaignTitle().getText()).toContain(browser.params.campaignTitle);

@胡塞尔,我希望下面的实现能起作用

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();
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();
    });
函数DashboardPage(){}
DashboardPage.prototype.clickCampaign=函数(repeaterName、className、expectedValue、index){
如果(!索引){
指数=0;
}
var titleElement=element.all(by.repeater(repeaterName)).get(index.element(by.className(className));
如果(期望值){
titleElement.getText().then(函数(文本){
expect(文本)。toContain(expectedValue);
});
}
};
module.exports=新建仪表板页面();
spec.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();
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();
    });
var dashBoardPage=require('../pageObject.js');
var repeaterName=‘活动中的活动’;
var className=‘活动标题’;
var expectedValue=browser.params.activityle;
var指数=0;
它('点击活动标题应进入活动报告',函数(){
dashBoardPage.campaignTitle();
});
为了更好地理解和实现pageObject模型,我对代码进行了调优。你可以检查一下,让我知道它是否有效。但这就是我的工作方式。
在单独文件中使用时,建议使用“prototype”

@Thehussel,我希望下面的实现能够起作用

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();
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();
    });
函数DashboardPage(){}
DashboardPage.prototype.clickCampaign=函数(repeaterName、className、expectedValue、index){
如果(!索引){
指数=0;
}
var titleElement=element.all(by.repeater(repeaterName)).get(index.element(by.className(className));
如果(期望值){
titleElement.getText().then(函数(文本){
expect(文本)。toContain(expectedValue);
});
}
};
module.exports=新建仪表板页面();
spec.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();
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();
    });
var dashBoardPage=require('../pageObject.js');
var repeaterName=‘活动中的活动’;
var className=‘活动标题’;
var expectedValue=browser.params.activityle;
var指数=0;
它('点击活动标题应进入活动报告',函数(){
dashBoardPage.campaignTitle();
});
为了更好地理解和实现pageObject模型,我对代码进行了调优。你可以检查一下,让我知道它是否有效。但这就是我的工作方式。
在单独文件中使用时,建议使用“prototype”

有几个问题需要知道你的代码1。您在哪里定义了帖子[0]?2.为什么你要将活动传递到函数中,因为它没有在函数中的任何位置使用?抱歉,已修复。我只想得到返回值。有几个问题想知道你的代码1。您在哪里定义了帖子[0]?2.为什么你要将活动传递到函数中,因为它没有在函数中的任何位置使用?抱歉,已修复。我只想得到返回值。嘿,巴德,仍然得到与-Failed:dashboardPage.campaignTitle相关的错误,它不是一个函数,就我所知,它没有提供更多信息,这真令人沮丧!在
仪表板页面
下是否有其他功能可用?可能您没有正确导入/导出。能否更新您的问题,说明如何创建
dashboardPage
对象以及如何导出它?此外,我怀疑这是问题所在,因为它应该以相同的方式处理,但传统的函数以小写字母开头,构造函数以大写字母开头。因此,也许可以尝试
var DashboardPage=function()…
this.campaignTitle=function()…
是的,我知道,这是文件中许多测试中唯一不起作用的测试。我认为这是我奇怪的逻辑,我将尝试重新设计它。其想法是,它从中继器中选择项目,检查项目标题是否匹配它应该匹配的内容,然后单击它。嘿,巴德,仍然得到与-Failed:dashboardPage.campaignTitle相关的错误。campaignTitle不是一个函数,就我所知,它是一个函数,它没有提供更多信息,这真令人沮丧!在
仪表板页面
下是否有其他功能可用?可能您没有正确导入/导出。能否更新您的问题,说明如何创建
dashboardPage
对象以及如何导出它?此外,我怀疑这是问题所在,因为它应该以相同的方式处理,但传统的函数以小写字母开头,构造函数以大写字母开头。因此,也许可以尝试
var DashboardPage=function()…
this.campaignTitle=function()…
是的,我知道,这是文件中许多测试中唯一不起作用的测试。我认为这是我奇怪的逻辑,我将尝试重新设计它。其思想是,它从中继器中选择项目,检查项目标题是否匹配它应该匹配的内容,然后单击它。