如何等待从返回另一个页面对象的页面对象解析的承诺?

时间:2016-08-23 15:47:17

标签: protractor pageobjects

我的pageObject文件:

 this.clickTheProvidedValueInCompanyInformation = function (item) {  
    this.innerMenu = this.companyInformation.all(by.className('innermenu')).first();     
    this.selectedItem = this.innerMenu.all(by.tagName('li')).filter(function (elem, index) {
        return elem.getText().then(function (text) {
            return text.toUpperCase().replace(/ |-/g, '') === item.toUpperCase().replace(/ |-/g, '');
        });
    });
    this.selectedItem.click();
    this.selectedItem.getText().then(function (text) {
        var option = text.toString(); 
        var pageObject = option.replace(/ /g, '_').toLowerCase(); 
 *******return require('./' + pageObject + '.page.js');**********
    })
};

这是我的spec文件中的一行:

var generalInfo = pageObject.clickTheProvidedValueInCompanyInformation('generalInformation');

如您所见,对pageObject.clickTheProvidedValueInCompanyInformation('generalInformation')的调用会返回另一个页面对象。

当我尝试在我的规范中访问我的generalInfo变量时,它会抛出错误

  

generalInfo未定义

。我可以通过generalInfo变量访问我返回的页面对象。

如果我把我的return require('./anotherPageObject.js')放在getText()之外。那么,它工作正常。但是我必须对文本进行一些操作来修改我的命名约定,以便它返回正确的页面对象文件。 (我想返回一个名为'general_information.page.js'的页面对象文件)

1 个答案:

答案 0 :(得分:2)

方法this.clickTheProvidedValueInCompanyInformation不会返回任何内容。添加return语句以返回最后一个承诺:

this.clickTheProvidedValueInCompanyInformation = function (item) {  
    this.innerMenu = this.companyInformation.all(by.className('innermenu')).first();     
    this.selectedItem = this.innerMenu.all(by.tagName('li')).filter(function (elem, index) {
        return elem.getText().then(function (text) {
            return text.toUpperCase().replace(/ |-/g, '') === item.toUpperCase().replace(/ |-/g, '');
        });
    });
    this.selectedItem.click();
    return this.selectedItem.getText().then(function (text) {
        var option = text.toString(); 
        var pageObject = option.replace(/ /g, '_').toLowerCase(); 
        return require('./' + pageObject + '.page.js');
    });
};
pageObject.clickTheProvidedValueInCompanyInformation('generalInformation').then(function(page){
  console.log(page);
});