量角器根据条件单击嵌套元素,错误 - 未在指定的超时内调用异步回调

Protractor clicking nested elements based on a condition, error - Async callback was not invoked within timeout specified

我正在尝试为我们在应用程序中使用的可重用 UI 控件之一创建一个页面 Object,这是一个 table 具有一堆 headers(th) 带有过滤按钮。我想单击特定 th 元素的按钮。这是我的代码

this.gridAllColumns = browser.element(by.css('[grid-service=envGridService]')).all(by.tagName('th'));

this.filterColumn = function(columnName){
    gridAllColumns.each(function(element){
        var text = element.getText();
        if( text = columnName){
            console.log(text);
            var buttonElement = element.element(by.tagName('button'));
            buttonElement.click();
        }
    });
}

我收到以下错误

Error: Timeout - Async callback was not invoked within timeout specified

我做错了什么?有人能给我指出正确的方向吗?

您需要使用 this 引用 gridAllColumns 并且您需要使用 filter():

this.filterColumn = function(columnName) {
    this.gridAllColumns.filter(function(header) {
        return header.getText().then(function (headerText) {
            return headerText === columnName;
        });
    }).first().element(by.tagName('button')).click();
}