我的角度页面中有ng-repeat
列表。每个中继器上都有五个不同的项目。
我想在所有转发器列表中搜索一个值,然后从列表中找到匹配的项目。
function(callback){
browser.sleep(2000);
element(by.css("h1 > span.ng-binding")).getText().then(function(text) {
var myid = text.trim();
console.log("****text"+text);
});
element(by.id("categories")).click();
element(by.linkText("kids")).click();
browser.sleep(6000);
var Content = element(by.css("[slides=\"ctrl.requestsHtml\"]"));
var tableRepeater = Content.all(by.repeater("view in ctrl.views track by $index")).each(function(rowElem,index){
var myRowElem = rowElem;
rowElem.element(by.tagName("div")).getOuterHtml().then(
function(success){
console.log(success);
//if this repeater row has the myid we are looking for, click the Edit button
if(success.match(/myid/)!=null){
var Edit = rowElem.element(by.linkText("Edit"));
Edit.click();
}
}
)
});
callback();
}
答案 0 :(得分:2)
rowElem.element(...)。getOuterHtml不是函数
getOuterHtml()
方法已从API中移除 - 请改为使用getAttribute()
:
rowElem.element(by.tagName("div")).getAttribute("outerHtml");
我还认为在这种情况下你实际上需要使用.filter()
而不是.each()
:
var desiredRow = Content.all(by.repeater("view in ctrl.views")).filter(function(rowElem) {
return rowElem.element(by.tagName("div")).getAttribute("outerHtml").then(function(outerHtml) {
return outerHtml.match(/myid/) != null;
});
}).first();
desiredRow.element(by.linkText("Edit")).click();
另请注意我是如何从“by repeater”定位器中删除“track by”部分的 - 它不是必需的。