【发布时间】:2019-10-14 13:42:29
【问题描述】:
我有以下 webdriver 功能:
this.clickButton = async function () {
try {
var buttonElement = await driver.findElement(By.className('button-class'));
await buttonElement.click();
}
catch (err) {
console.log(err);
}
}
这有时会给出Stale Element exception。
即使我将其更改为,我有时也会遇到该异常:
this.clickButton = async function () {
try {
await driver.findElement(By.className('button-class')).click();
}
catch (err) {
console.log(err);
}
}
我的问题是:
在此函数中是否会出现
Stale Reference exception是否正常/预期,我在其中获取元素引用,然后在下一行甚至同一行使用它,对页面不执行任何其他操作? (如果不存在“按钮类”的元素,我可以理解得到一个“未找到元素”异常,但对我来说,该元素在我搜索它的时间存在是没有意义的,但它是在到达下一行代码时消失了。)如果问题 1 的答案是肯定的,那怎么可能?找到的元素会立即采取行动,就像在这种情况下一样?如您所见,我没有重用定位器/元素;该函数每次调用时都会搜索元素,并在单击后立即结束。
单击按钮会将自身从页面中删除是否相关?也就是说,我是否会因为单击后按钮消失而收到此异常?
【问题讨论】:
-
stackoverflow.com/questions/43471166/… 请检查此页面中的答案。他提到'它试图等待 (click()) 永远不会被调用,因为 Promise 没有 click() 函数'
-
我认为链接的答案并不完全正确。在那一个中,提问者得到了一个“不是函数”的错误。就我而言,无论我使用的是函数的 1 行版本还是 2 行版本,有时都会遇到 Stale Element 异常。
-
StaleElementReference 有时会在加载过时的 DOM 时发生,因此在同一个查找器中存在多个元素。例如,有一次我测试了一个 Web 应用程序,它保持 3 个页面的 DOM 加载,并且我在所有三个页面上都有一个具有相同 finder ref 的按钮。我的代码非常适合第 1 页按钮,但是我在第 2 页上得到了 StaleElementRefernce,因为第一页的 DOM 也已加载,我得到的是第 1 页的按钮而不是第 2 页。只是为了调试尝试使用精确的 xpath 来查找元素或其他独特的查找器。
-
@sameeksha sahib 这是一件好事,但在这种情况下,我正在搜索的内容在页面中已经是独一无二的,除非它很快被添加和删除或其他东西。
-
检查 Ardesco 她的stackoverflow.com/questions/16166261/… 的答案(并使用 try/catch 再次查找元素,以防旧元素被抛出)
标签: javascript selenium-webdriver