我正在为计算器网站开发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”
请帮我解决这个问题。
答案 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);
});
});
});
}
请告诉我这是一个好方法吗? 还是有其他方法可以解决我的问题。