量角器无法捕捉元素

时间:2015-06-22 06:32:00

标签: angularjs protractor

我有过滤列表(多选)和仪表板来显示所有项目。 第一次,仪表板将显示所有项目,然后我将选择过滤器列表中的项目,仪表板将仅显示过滤器列表中的项目。

所以我的测试比较没有。过滤器列表中的项目必须等于否。仪表板中的项目。

但是仪表板将每3秒自动重新加载一次,问题是量角器无法及时计算仪表板中的元素并显示不相等的错误。

是否可以强制Protractor对一次显示的所有元素进行快照以使用它进行比较?

我的申请已由AngularJS编码。

以下是测试代码的一部分

it('show all visibled element', function(){
    browser.get('http://localhost:8080/dashboard/');
    browser.ignoreSynchronization = true;

    // Delay browser 
    // Refer link : http://stackoverflow.com/questions/24960290/can-protractor-be-made-to-run-slowly
    var delayLoad = browser.driver.controlFlow().execute;

    browser.driver.controlFlow().execute = function() {
        var args = arguments;

        delayLoad.call(browser.driver.controlFlow(), function() {
            // delay 500 ms for dashboard renders all items
            return protractor.promise.delayed(500);
        });

        return delayLoad.apply(browser.driver.controlFlow(), args);
    };

    var filter_expand = element(by.css('body > main > div > aside.aside.filter-bar.filters-closed > span'));
    //browser.actions().mouseMove(filter_expand)
    browser.actions().mouseMove(filter_expand).click().perform()
        .then(function(){
            var item_filter = element(by.css('body > main > div > aside.aside.filter-bar.filters-open > ng-include > div > nav > ul:nth-child(1) > li.filter-load > input:nth-child(3)'));

            item_filter.click().then(function(){
                var item_count = element(by.css('#s2id_autogen3 > ul')).all(by.css('li'));
                var dashboard_count = element(by.css('div.dashboard > main > ul')).all(by.css('li'));

                expect(item_count.count()).toEqual(dashboard_count.count());
            });
        });
})

1 个答案:

答案 0 :(得分:0)

我的解决方法是指定元素路径(CSS)并调用重试的函数,直到找到它为止。

请参阅:http://darrellgrainger.blogspot.sg/2012/06/staleelementexception.html

以下是我的代码

function waitElement(elm,val){
        element(by.css(elm)).getText().then(function(txt){
           console.log(err_num);
           expect(txt).toEqual(val);
        }, function(err){
            if (err_num < 5) {
                err_num ++;
                waitElement(elm,val);
            }
        });
    }

    err_num = 0;
    waitElement('body > main > div > ng-view > div > main > ul > li:nth-child(1) > p.body-large.ng-binding','Found it');