【问题标题】:How to avoid "stale element exception" in C# with selenium using collections?如何在 C# 中使用 selenium 使用集合避免“陈旧元素异常”?
【发布时间】:2021-03-13 17:51:03
【问题描述】:

我有一个页面,里面有 50 个条目,我需要一个一个地导航到每个条目。在我从第一个返回并尝试导航到第二个后抛出异常。谷歌搜索了一段时间后,我发现这可能是因为主页的实例被删除了。我正在使用 foreach 循环并希望代码继续。 代码如下所示:

IReadOnlyCollection<IWebElement> anchors = this.driverIpass.FindElements(By.CssSelector(".card-list-item.ng-scope"));
            foreach (IWebElement anchor in anchors)
            {
                anchor.FindElement(By.XPath("//*[contains(@id,'workitem-goto-tablet-btn')]")).Click();

                //below is test button to go back
                driverIpass.FindElement(By.Name("editForm:j_idt693")).Click();

            }

正如您所看到的,我在这里尝试做的就是进入然后返回集合中的每个项目。我对这一切都很陌生,有人可以让我走上正确的道路吗? 谢谢

【问题讨论】:

    标签: c# selenium


    【解决方案1】:

    尝试保留一个 id 列表并循环遍历该列表,而不是过时的 anchors 集合。

    【讨论】:

    • 谢谢,我试试看。你能告诉我列表和我在这里所做的事情之间的区别,以便我更好地理解它吗?
    • 网页元素对页面的导航有一定的了解。看到这个stackoverflow.com/a/45003230/10491171
    • 这实际上是正确的。但原因是:当您“返回”到第一页时,DOM 将被重写,导致您之前获取的 webElement 引用变得陈旧。见selenium.dev/exceptions
    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2023-04-04
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    相关资源
    最近更新 更多