gpt4 book ai didi

c# - 在特定的 IWebElement 上使用 webdriverwait

转载 作者:太空狗 更新时间:2023-10-29 23:32:28 25 4
gpt4 key购买 nike

我正在将 selenium webdriverwait 方法应用于特定的 IWebElement 以在可用时获取此 IWebElement 的一些子元素。这是我的代码...

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IList<IWebElement> elementsA = wait.Until<IList<IWebElement>>((d) =>
{
return driver.FindElements(By.XPath("//table[@class='boxVerde']"));
});

foreach (IWebElement iwe in elementsA)
{
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IList<IWebElement> elementsB = wait.Until<IList<IWebElement>>((d) =>
{
return iwe.FindElements(By.XPath("tr/td/div/a"));
//trying to fetch the anchor tags from the element
});
}

它一直给我一个错误,说“元素不再附加到 DOM”...我认为 webdriver 等待根本不起作用。我做错了什么吗?非常感谢

最佳答案

听起来您正在遭受陈旧元素的困扰。

Selenium 找到的每个 WebElement 实际上都是对 DOM 中元素的引用

有时网站上使用的 JavaScript 会破坏并重新创建一个元素,当这种情况发生时,您现有的引用会变得陈旧,您会看到一个 StaleElementReferenceException(至少在 Java 领域是这样称呼的,您应该会看到非常相似的东西) .

因此,如果您看到 StaleElementReferenceException 或一条消息,指出“元素不再附加到 DOM”,这意味着对 DOM 中您曾经拥有的元素的引用不再有效,因为您拥有的元素对的引用已被销毁。

这在视觉上并不总是很明显,因为原始元素可能已被破坏,然后重新创建了一个相同的元素,但是它是一个新元素,因此您需要创建一个新的引用才能与之交互。

创建新引用的方法是重新查找元素。

您的问题并不完全清楚,但我假设您在找到表格后遍历 anchor 元素列表时遇到了问题。如果是这种情况,则表明在您找到表格元素然后开始遍历表格内的 anchor 元素之间的时间点,表格已被销毁并重新创建。

如果是这种情况,您将需要再次找到该表,一个有用的技巧是等待该表变得陈旧,然后再尝试再次找到它。通过这种方式,您可以有理由相信页面上破坏表格然后重新创建表格的任何 JavaScript 已完成处理。 .NET ExpectedConditions class不如 Java ExpectedConditions class 成熟.我建议看看一些 Java 的并将它们移植到 .NET(它应该相当简单,结构非常相似),特别感兴趣的是等待元素变得陈旧的 Java。

关于c# - 在特定的 IWebElement 上使用 webdriverwait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15804916/

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