量角器 StaleElementReferenceError: 元素不再附加到 DOM
protractor StaleElementReferenceError: Element is no longer attached to the DOM
在我的 Angular 应用程序中,当用户打开页面时,我们首先加载缓存的内容,然后通过对服务器的异步调用来轮询实际数据并更新页面。 我正在尝试访问已经显示的元素,但是该元素的指针已更改,因为页面内容已更新,即使该特定元素上实际上没有任何更改。
我尝试了不同的解决方案,但仍然无法使其像我想要的那样稳定。我需要类似try/catch块的东西,因为我不想使用browser.wait。
从描述看起来像
browser.waitForAngular();
应该处理$http电话,但没有帮助。
下面是一个代码示例:
element(by.id('closeEditTagsModal')).click();
helper.waitElementToDisappear(element(by.css('body[class$="modal-open"]')));
element(by.id('myBookingsTab')).click();
helper.waitElementToDisappear(element(by.css('body[class$="loading"]')));
try {
(helper.waitElementToBeShown(element(by.repeater('b in currentbookings').row(0)).element(by.cssContainingText('.tagPill', 'TestTag')))).then(function() {
}, function(err) {
console.log('element was not found');
throw err;
});
}
catch (err) {
helper.waitElementToBeShown(element(by.repeater('b in currentbookings').row(0)).element(by.cssContainingText('.tagPill', 'TestTag')));
}
这是我尝试使用 try/catch 的另一个示例,但看起来我做错了什么。我在try块中有此错误:
StaleElementReferenceError: Element 不再附加到 DOM
我的帮助函数的代码:
var waitElementToBeShown = function (elm) {
browser.wait(function () {
return elm.isPresent();
},10000);
browser.wait(function () {
return elm.isDisplayed();
},10000);
};
我正在尝试等待元素可用以进行交互。
我怀疑该错误被抛出,因为DOM在两次调用browser.wait
之间发生了变化。 与其将元素承诺传递到browser.wait
,不如传入更间接的东西。 您可以直接传递定位器:
var waitElementToBeShown = function (elmLoc) {
browser.wait(function () {
return element(elmLoc).isPresent();
},10000);
browser.wait(function () {
return element(elmLoc).isDisplayed();
},10000);
}
但您并不总是有一个简单的定位器表达式。 也许传入一个查找元素的函数? 这样,查找将在每次等待中重新评估:
var waitElementToBeShown = function (elmFunc) {
browser.wait(function () {
return elmFunc().isPresent();
},10000);
browser.wait(function () {
return elmFunc().isDisplayed();
},10000);
}
然后你可以这样称呼它:
waitElementToBeShown(function() {
return element(by.repeater('b in currentbookings').row(0)).element(by.cssContainingText('.tagPill', 'TestTag')));
});
我对这个答案并不完全有信心,但似乎它应该有效......
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- Windows形成web浏览器控件和Javascript更改的DOM
- Datatables:通过DOM数据源中的名称引用列
- 在DOM中查找一个模式并替换它's的内容使用jquery
- DOM事件通过JSON转换为java
- 不再使用innerHTML进行AJAX响应.(代码未得到响应)
- 将DOM节点值与字符串Javascript进行比较
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 流星中DOM的繁殖
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 量角器 StaleElementReferenceError: 元素不再附加到 DOM
- Watir”;元素不再附加到DOM“;错误
- 如何删除不再绑定到dom的模型
- 当使用回调函数时,JavaScript如何从不再在DOM中的iframe访问元素?