我正在测试的应用程序使用转发器输出一个列表,我希望能够找到特定行并单击该行中的编辑按钮。
我正在使用.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 :(得分:0)
您必须使用var button = elem[0].this.editWineButton;
,请在此网站上查看如何在javascript中更有效地使用this
:http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/
答案 1 :(得分:0)
我尝试了igniteram1对elem [0] .this.editWineButton的建议,但它没有解决问题。但是,我找到了解决方案。这两个关键部分使用了Protractor Chained Elements by Using Variables?中描述的element.locator()。其次,添加
_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();
});
};