【问题标题】:Protractor - Failed: stale element reference: element is not attached to the page document量角器 - 失败:过时的元素引用:元素未附加到页面文档
【发布时间】:2015-04-28 20:04:44
【问题描述】:

我的量角器 e2e 页面对象中有一个功能,可以取消选中下拉菜单中的几个选项。它以前运行良好,但现在我收到以下错误:

失败:过时的元素引用:元素未附加到页面文档

我尝试在for循环的每次迭代中获取元素,但是for循环在第一次解决promise之前执行,这意味着x的“限制”值被重复传递,并且测试只是点击多次使用相同的下拉选项。

this.uncheckColumns = function(limit) {
    element(by.className('fa-cog')).click();
    element.all(by.className('multiSelectLi')).then(function(options) {
        for (x = 1; x < limit; x++) {
            options[x].click();
        };
    });
};

【问题讨论】:

    标签: javascript angularjs selenium jasmine protractor


    【解决方案1】:

    each(element, index)怎么样:

    element.all(by.className('multiSelectLi')).each(function(option, index) {
        if (index < limit) {
            option.click();
        }
    });
    

    或者,结合filter(element, index)

    element.all(by.className('multiSelectLi')).filter(function(option, index) {
        return index < limit;
    }).each(function(option) {
        option.click();
    });
    

    还有一种解决问题的简单方法(在循环中不断调用element.all()):

    for (var index = 0; index < limit; index++) {
        var option = element.all(by.className('multiSelectLi')).get(index);
        option.click();
    };
    

    【讨论】:

    • 两者的错误相同 - Failed: stale element reference: element is not attached to the page document - 似乎因为 DOM 正在改变,我需要再次获取所有的“multiSelectLi”元素。
    • @DanielBogart 听起来不错。好吧,天真的方法是在循环中手动维护索引的while index &lt; limit 循环,在每次迭代中重复element.all 调用并使用get(index) 来获取第n 个元素。如果您需要示例,请告诉我。
    • @DanielBogart 提供,请检查是否有帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多