当我尝试单击与给定文本匹配的下拉元素时,我遇到上述问题。下拉菜单的所有选项均与跨度包含文本的图像相同。 我尝试了此处链接中给出的操作,但没有成功。 Protractor: Failed: stale element reference: element is not attached to the page document。标签的参考如下图所示。
我的代码看起来像这样
element.all(by.css('ul[class='ui-dropdown-items ui']>li')).each(function(element) {
element.getText().then(function (text) {
if (text.includes("Bag")){
element.click();
}
});
});
尽管上述语句执行了点击操作,但仍会引发错误。 另外,当我尝试单击任何索引作为硬编码时,它也没有错误。 element.all()。get(4),其中4是元素的索引。 我的应用程序是在角度5中。 有人可以帮我这个忙!这阻止了我的项目。
答案 0 :(得分:2)
element.all().each()
在每个元素上执行迭代,即使您添加了if
条件仅单击全部元素中的一个,但是每次迭代中的getText()
仍将执行。
单击匹配的元素后,页面将重定向或刷新。然后在“新”页面上的下一个元素上调用getText()
,这就是为什么报告stale reference exception
您需要过滤匹配的元素,然后单击它。
// approach 1
element
.all(by.css('ul[class='ui-dropdown-items ui']>li'))
.filter(function(ele) {
return ele.getText().then(function (text) {
return text.includes("Bag");
});
})
.then(function(eles){
if (eles && eles.length > 0) {
eles[0].click()
}
})
// approach 2
let options = element.all(by.css('ul[class='ui-dropdown-items ui']>li'))
options.getText(function(txts) {
return txts.findIndex(function(txt){
return txt.includes('Bag');
})
})
.then(function(index){
return index !== -1 && options.get(index).click();
})