如何使用带有量角器的foreach在ng-repeat中找到元素?

时间:2017-06-18 07:12:41

标签: javascript foreach protractor

我的角度页面中有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();
}

1 个答案:

答案 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”部分的 - 它不是必需的。