typescript - 使用 Protractor 和 TypeScript,如何根据该列的标题文本返回网格的列索引?

标签 typescript protractor webstorm

我正在尝试编写一个函数,该函数将根据该列的标题文本返回网格的列索引。我已经做了很多尝试,这些尝试出现在下面的评论中。最后,这个函数总是返回-1,而不是预期的列索引。使用 WebStorm 调试器,我已经能够验证输入函数的参数是否已填充。

此外,您可以看到我尝试通过 CSS 选择器执行此操作,这是一种绝望的方法。

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;
};

我尝试的其他方法(此处未显示)也失败了。感觉就像我忽略了一些基本的东西。感谢您的帮助。

最佳答案

与一位同事合作,他指出了我上述方法的几个突出问题。他能够按如下方式修复此问题:

首先,函数的签名需要返回一个 promise ,而不是一个数字。请注意返回类型和返回语句。

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-function 语法分配返回值,如下所示。

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...
        });
    });
});

关于typescript - 使用 Protractor 和 TypeScript,如何根据该列的标题文本返回网格的列索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34744394/

相关文章:

typescript - Typescript d.ts 中的函数对象

html - 如何根据 Angular 7 中的某些值默认选中特定的复选框

javascript - 使用 Protractor 测试页面上的所有链接

angularjs - 需要在 Protractor 测试用例中访问我的 angular.service

webstorm - 使 Webstorm 使用单引号更漂亮

text-editor - WebStorm:打开另一个工作区/窗口后无法在编辑器 LINUX 中输入

javascript - Angular2 - 通过超时函数将变量与 EventEmitter 传递给父组件

javascript - typescript 计算数组中的重复项并按每个项目的计数对结果进行排序

javascript - 当我尝试创建提交时出现错误 "Cannot find module ' eslint-config-strict/es 5'"

ide - 如何在 Sublime Text 2 中美化