循环量角器

时间:2016-05-06 14:07:41

标签: protractor

我试图查看菜单中的75个元素。菜单有搜索区域和元素。我想要做的是从我的列表中获取每个元素,将元素的文本输入到搜索区域,验证元素是否存在于列表中,然后清除搜索区域并输入第二个元素,依此类推。输入第一个元素后,检查并清除搜索区域,程序停止并给出错误:失败:陈旧元素引用:元素未附加到页面文档。我知道这是承诺的问题,但我已经尝试了所有我能找到的关于量角器(每个,地图,蓝鸟等)的循环承诺的内容。没有什么工作......

enterElementsInSearchArea : function()
{
    var menuLinks = this.menuLinks;
    /*var searchArea = this.searchArea;*/

    function searchElement(text)
    {
        var menuLinks = element.all(by.css('.first-level > ul > li > a'));
        var searchArea = element(by.id('search'));
        searchArea.sendKeys(text);
        //console.log(search);
        expect(menuLinks.count()).toBe(1);
        searchArea.clear();
        expect(menuLinks.count()).toBe(menuLinks.length);
    };

    menuLinks.then(function(items)
    {
        for(var i in items) 
        {
            (function(i) 
            {
                // console.log('here1');
                // browser.pause();
                items[i].getText().then(function(text)
                {
                    console.log(i);
                    // browser.pause();
                     searchElement(text);
                    // console.log('here3');
                    // browser.pause();
                });  
            })(i);
        }
    }); 
}

1 个答案:

答案 0 :(得分:1)

你的立即调用的函数表达式应该像循环一样...... each

我怀疑您的问题是在searchElement()方法中...您可能只需要等待应用程序恢复就绪状态。尝试类似:

var menuLinks = element.all(by.css('.first-level > ul > li > a'));
var searchArea = element(by.id('search'));

function searchElement(text) {
    searchArea.sendKeys(text);

    expect(menuLinks.count()).toBe(1);

    // cleanup... 
    searchArea.clear();
    browser.wait(function() {
        // or something that indicates ready state...
        return menuLinks.count() > 1;
    }, 3000)
}