2016-06-28 78 views
0

我正在测试的应用使用中继器输出列表,并且希望能够找到特定行并点击该行内的编辑按钮。使用现有定位器单击中继器内的元素

我使用.filter找到相关的行,然后点击编辑按钮,但如果我指定的定位器按钮,而不是如果我指的是现有的定义这仅适用:

this.editWineButton = element(by.buttonText('edit')); 

this.editWine = function (wineName) { 
    this.wineListEntries.filter(function(row){ 
     return row.element(by.binding('wine.name')).getText().then(function(name){ 
      return name === wineName; 
     }); 
    }).then(function (elem) { 
    //THIS WORKS 
     var button = elem[0].element(by.buttonText('edit')); 
    //THIS FAILS 
     //var button = elem[0].editWineButton; 
     button.click(); 
    }); 
}; 

已经为编辑按钮定义了定位器,我需要做些什么才能重新使用筛选器的结果?

当我运行的代码失败版本我得到的错误

“失败:无法读取属性未定义的‘点击’”。

我觉得答案肯定是显而易见的,但我看不出我的错误。任何建议将非常受欢迎。

回答

0

我试图ELEM [0] .this.editWineButton的igniteram1的建议,但它并没有解决问题。不过,我找到了解决办法。这两个关键部分是使用element.locator(),如Protractor Chained Elements by Using Variables?中所述。其次,加入

_this = this; 

修改后的代码是:

this.editWineButton = element(by.buttonText('edit')); 

this.editWine = function (wineName) { 
    var _this = this; 
    this.wineListEntries.filter(function(row){ 
     return row.element(by.binding('wine.name')).getText().then(function(name){ 
      return name === wineName; 
     }); 
    }) 
    .then(function (elem) { 
     var button = elem[0].element(_this.editWineButton.locator()); 
     button.click(); 
    }); 
}; 
相关问题