StaleElementReferenceError:陈旧元素引用:当我单击按钮时,元素未附加到页面文档

时间:2016-02-26 05:51:08

标签: jasmine protractor

我在Protractor中关注页面对象模式。在下面的代码中,我匹配用户名并单击编辑按钮

this.clickEditButton = function (userName) {        
    element.all(by.repeater('u in users')).each(function (elem) {
        elem.element(by.css('td:nth-child(1)')).getText().then(function (value) {                
            if (value == userName) {
                elem.element(by.css("a[href*='#/organisation/editUser/31']")).click();

            }
        });
    });    
};

页面打开成功,但它正在抛出" StaleElementReferenceError:陈旧元素引用:元素未附加到页面文档"

主要方法:

  userDirectoryPage.clickEditButton('EditUser1');            
  userEditPage.addBasicDetails('', 'Timon', 'Thompson', 'dummy1@abc', 'abc', 'abc', 'Testing');

有人有一些建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

这里的问题是您正在使用each() - 当单击编辑按钮时,DOM会更改,并且对下一个用户元素的引用将变为"陈旧"。

您需要使用filter()代替:

this.clickEditButton = function (userName) {        
    element.all(by.repeater('u in users')).filter(function (elem) {
        elem.element(by.css('td:nth-child(1)')).getText().then(function (value) {                
            return value === userName;
        });
    }).first().element(by.css("a[href*='#/organisation/editUser/31']")).click();    
};