需要帮助在量角器中使用for循环和getText()

时间:2014-12-17 00:56:00

标签: javascript angularjs testing protractor

browser.findElements(protractor.By.repeater('cat in cats')).then(function(rows) {
        for (i = 0; i < rows.length; i++) { //which is always 3
            var tmp = element(by.repeater('cat in cats').row(i)).element(by.binding('cat.name')).getText();
            tmp.then(function(text) {
                console.log('text is : ' + text);
                console.log('iteration number is: ' + i);
                if (text == 'someText') {
                    element(by.repeater('cat in cats').row(i)).element(by.binding('cat.action')).click();
                }
            });
        }

在这种情况下,&#39; i&#39;函数内部总是返回3。 我得到了文本,然后检查文本是否是我想要的,然后单击一个元素。

&#39; i&#39;的价值在&#39;如果&#39;声明总是返回3.与承诺有关,但我不确定。 任何有关修改代码的帮助都非常感谢。

谢谢!

1 个答案:

答案 0 :(得分:4)

不要多次致电by.repeater();相反,使用map()和&#34;链&#34;这样的承诺:

element.all(By.repeater('cat in cats')).map(function(elm) {
    return {
        text: elm.element(by.binding('cat.name')).getText(),
        action: elm.element(by.binding('cat.action'))
    };
}).then(function(arr) {
    for (var i = 0; i < arr.length; i++) { 
        if (arr[i].text == 'someText') {
            return arr[i].action;
        }
    }
    throw new Error('Text not found');
}).then(function(elm) {
    elm.click();
});

所有学分都转到@Andres,获取此处提供的解决方案:

另见: