gpt4 book ai didi

javascript - 为什么在这种情况下会出现 Stale Element 异常?

转载 作者:行者123 更新时间:2023-11-28 03:30:22 26 4
gpt4 key购买 nike

我有以下网络驱动程序功能:

this.clickButton = async function () {
try {
var buttonElement = await driver.findElement(By.className('button-class'));
await buttonElement.click();
}
catch (err) {
console.log(err);
}
}

这有时会产生陈旧元素异常

即使我将其更改为:有时也会遇到该异常:

this.clickButton = async function () {
try {
await driver.findElement(By.className('button-class')).click();
}
catch (err) {
console.log(err);
}
}

我的问题是:

  1. 此函数中可能发生过时引用异常是否正常/预期,我在其中获取元素引用,然后在下一行甚至同一行使用它,对该页面不做任何其他事情? (如果不存在“按钮类”元素,我可以理解得到“未找到元素”异常,但该元素在我搜索它时存在对我来说没有意义,但它是当到达下一行代码时就消失了。)

  2. 如果问题 1 的答案是肯定的,那怎么可能呢?找到的元素会立即执行,就像在本例中一样吗?正如你所看到的,我没有重用定位器/元素;该函数每次调用时都会搜索该元素,并在单击后立即结束。

  3. 单击按钮会将其自身从页面中删除是否相关?也就是说,我是否会因为单击后按钮消失而收到此异常?

最佳答案

必须使用selenium的wait-until-clickable操作符,出现这个错误是因为仍未出现在DOM中或者仍然不可点击。示例代码:

var webDriver= new ChromeDriver(Constants.DriverPath);
WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(5));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.ClassName('button-class')));

然后就可以进行操作了:

var buttonElement = await webDriver.FindElement(By.ClassName('button-class'));
await buttonElement.Click();

在 JavaScript 中,没有可点击的,但您可以检查可见和启用状态,例如:

driver.findElement(webdriver.By.name('q')).then(function (element) {
driver.wait(function () {
return element.isDisplayed().then(function (displayed) {
if (!displayed)
return false;

return element.isEnabled();
});
});
element.sendKeys('webdriver');
});

关于javascript - 为什么在这种情况下会出现 Stale Element 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58227174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com