我在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');
有人有一些建议如何解决这个问题吗?
答案 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();
};