加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 05:37:29 所属栏目:百科 来源:网络整理
导读:我将selenium webdriverwait方法应用于特定的IWebElement,以便在它们可用时获取此IWebElement的一些子元素.这是我的代码…… WebDriverWait wait = new WebDriverWait(driver,TimeSpan.FromSeconds(10));IListIWebElement elementsA = wait.UntilIListIWebEl
我将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中元素的引用不再有效,因为您引用了该元素已被摧毁.

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

创建新引用的方法是再次查找该元素.

你的问题并不完全清楚,但我假设你在找到表后迭代锚元素列表时遇到问题.如果是这种情况,则表明该表已被破坏并在您找到表元素的点之间重新创建,然后开始迭代表中的锚元素.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读