使用量角器和TypeScript,如何根据该列的标题文本返回网格的列索引?
我正在尝试编写一个函数,根据该列的标题文本返回网格的列索引。我做了很多尝试,这些尝试出现在下面的评论中。最后,该函数总是返回-1,而不是预期的列索引。使用WebStorm调试器,我能够验证输入函数的参数是否正在填充 此外,您可以看到我试图通过CSS选择器来实现这一点,这是一种绝望的方法使用量角器和TypeScript,如何根据该列的标题文本返回网格的列索引?,typescript,protractor,webstorm,Typescript,Protractor,Webstorm,我正在尝试编写一个函数,根据该列的标题文本返回网格的列索引。我做了很多尝试,这些尝试出现在下面的评论中。最后,该函数总是返回-1,而不是预期的列索引。使用WebStorm调试器,我能够验证输入函数的参数是否正在填充 此外,您可以看到我试图通过CSS选择器来实现这一点,这是一种绝望的方法 public getColumnIndexByHeaderText(gridId: string, headerText: string): number { var GRID_HEADER_REPEAT
public getColumnIndexByHeaderText(gridId: string, headerText: string): number {
var GRID_HEADER_REPEATER: string = 'col in colContainer.renderedColumns track by col.uid';
var columnIndex: number = -1;
// Attempt A
element(by.id(gridId)).all(by.repeater(GRID_HEADER_REPEATER)).getText().then(function (textArray) {
columnIndex = textArray.indexOf(headerText);
});
// Attempt B
element(by.id(gridId)).then(function (grid) {
grid.all(by.repeater(GRID_HEADER_REPEATER)).getText().then(function (textArray) {
columnIndex = textArray.indexOf(headerText);
});
});
// Attempt C
element.all(by.repeater(GRID_HEADER_REPEATER)).filter(function (elm, index) {
return elm.getText().then(function (text) {
if (text === headerText) {
return index;
}
});
});
// Attempt D
var cssSelector = '#' + gridId + ' .ui-grid-header span.ng-binding';
element.all(by.css(cssSelector)).getText().then(function (textArray) {
columnIndex = textArray.indexOf(headerText);
});
return columnIndex;
};
我尝试的其他方法(此处未显示)也失败了。我觉得我忽略了一些基本的东西。谢谢你的帮助。与一位同事一起工作时,他指出了我上述方法的几个突出问题。他能够通过以下方式解决此问题: 首先,函数的签名需要返回承诺,而不是数字。注意返回类型和返回语句
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);
});
};
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...
});
});
});