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

How to wait for a promise to be resolved from a page object which is returning another page object?

我的页面对象文件:

 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');**********
    })
};

这是我的规范文件中的一行:

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

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

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

generalInfo is undefined

。我可以做什么通过 generalInfo 变量访问我的 returned 页面对象。

如果我将我的 return require('./anotherPageObject.js') 放在 getText() 之外。那么它就可以工作 fine.But 我必须对文本做一些操作来修改我的命名约定,这样它 returns 正确的页面对象文件。 (我想 return 一个名为 'general_information.page.js' 的页面对象文件)

方法 this.clickTheProvidedValueInCompanyInformation 没有 return 任何东西。将 return 语句添加到 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);
});