与一位同事合作,他指出了我上述方法的几个突出问题。他能够按如下方式解决此问题:
首先,函数的签名需要返回一个承诺,而不是数字。注意返回类型和返回语句。
public getIndexByHeaderText(gridId: string, headerText: string): protractor.promise.Promise<number> {
var GRID_HEADER_REPEATER: string = 'col in colContainer.renderedColumns track by col.uid';
return element(by.id(gridId)).all(by.repeater(GRID_HEADER_REPEATER)).getText().then(function (textArray) {
return textArray.indexOf(headerText);
});
};
其次,对该函数的调用需要将其视为一个promise,并通过then函数语法分配返回的值,就像这样。
it('Should do something', function() {
lib.grid.getRow.byRowIdentifier(page.GRID_ID, newUserEmailPrefix, 'name').then(function (gridReturnObject) {
lib.grid.column.getIndexByHeaderText(page.GRID_ID, 'Header Text').then(function (columnIndex) {
var deactivateButtonCell = gridReturnObject.rowCellElements[columnIndex];
// Other code omitted for clarity...
});
});
});