在量角器中使用POM返回值形式函数

时间:2019-03-04 06:04:45

标签: protractor

我正在为计算器网站开发POM。但是,当我将函数的值返回到我的主要规格文件时,我受阻了。

下面是文件 PageObjectFile

var calc_new = function(){
let firstField= element(by.model('first'));
let secondField= element(by.model('second'));
let option=element.all(by.tagName('option'));
let tbody = element(by.tagName('tbody'));
let go = element(by.id('gobutton'));
// let firstField= element(by.model('first'));

this.firstNumber=function(first){
    firstField.sendKeys(first);
};
this.secondNumber=function(second){
    secondField.sendKeys(second);
};

this.operatorSelection=function(oprt){
    option.each(function(opt){
        opt.getText().then(function(oprc){
            if(oprc==oprt){
                console.log('##OPRC: '+oprc);
                opt.click();
                }
            });  
    }); 

};
this.clickGo= function(){
    go.click();
};

this.getResult= function(){
    browser.sleep(5000);
        tbody.all(by.tagName('tr')).each(function(row){
            row.all(by.tagName('td')).last().getText().then(function(Result){
                console.log('Result is '+ Result);
                return Result;
            });
        //How can i return this Result to spec file TestNew.js
        });
    }
};module.exports = new calc_new();

SpecFile.js

        var calc= require('../PageElements/calc_new');
describe('Its a test Suite', function(){
browser.waitForAngularEnabled(false);
    it('Calculation Operations',function(){
    browser.get('http://juliemr.github.io/protractor-demo');
    calc.firstNumber('100');
    calc.secondNumber('30');
    calc.operatorSelection('*');
    calc.clickGo();
    //Want to expect here after returning value from getResult()
    expect(calc.getResult()).toEquals(3000);
}); });

请提出任何解决方案的建议

==== 每次我得到输出时 预期未定义的值等于“ 3000”

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

您需要使getResult函数具有return语句。

1)直接返回第一行第三td文本的方法。

this.getResult= function(){

    browser.sleep(5000);

    // the latest calculate result always at the 1rd row and the 3rd cell
    return tbody.element(by.css('tr:nth-child(1) > td:nth-child(3)')).getText();
};

2)使用ElementFinderArray.filter

的方法
this.getResult= function(){

    browser.sleep(5000);

    return tbody.element(by.css('tr')).filter((row, index)=>{
        // the latest calculate result always at the 1rd row and the 3rd cell
        if(index === 0) {
            return row.all(by.css('td')).last();
        }
    }).then((td)={
        return td.getText();
    })
};

3)使用ElementFinderArray.getText()

的方法
this.getResult= function(){

    browser.sleep(5000);

    return tbody.element(by.css(' > td'))
        .getText()
        .then((txts)=>{
            // the latest calculate result always at the 1rd row and the 3rd cell
            return txts && txts[2];
        })
};

答案 1 :(得分:0)

嗨,我尝试通过使用以下代码将承诺返回到我的规范文件之前解决该承诺:

this.getResult = function () {
return new Promise(function (resolve) {// Resolve the promise before returning to main spec
  browser.sleep(5000);
  tbody.all(by.tagName('tr')).each(function (row) {
    row.all(by.tagName('td')).last().getText().then(function (Result) {
      // value = Result;
      console.log('Result is ' + Result);
      resolve(Result);
    });
  });
});

}

请告诉我这是一个好方法吗? 还是有其他方法可以解决我的问题。