gpt4 book ai didi

selenium - geb StaleElementReferenceException

转载 作者:行者123 更新时间:2023-12-05 05:28:20 27 4
gpt4 key购买 nike

我刚刚开始使用带有 webdriver 的 geb 进行自动化测试。 As I understand it ,当我在页面上定义内容时,每次调用内容定义时都应该查找页面元素。

//In the content block of SomeModule, which is part of a moduleList on the page:
itemLoaded {
waitFor{ !loading.displayed }
}
loading { $('.loading') }


//in the page definition
moduleItems {index -> moduleList SomeModule, $("#module-list > .item"), index}

//in a test on this page
def item = moduleItems(someIndex)
assert item.itemLoaded

所以在这段代码中,我认为应该重复调用 $('.loading'),以便在模块的基本元素的上下文中通过选择器找到页面上的元素。然而,此时我有时会收到 StaleElementReference 异常。据我所知,该元素并没有从页面中删除,但即使它删除了,也不应该产生这个异常,除非 $ 在幕后做一些缓存,但如果那是否则会导致各种其他问题。

有人可以帮助我了解这里发生的事情吗?为什么在查找元素时可能会出现 StaleElementReferenceException?指向相关文档或 geb 源代码的指针也很有用。

最佳答案

事实证明,问题在于对模块本身表示的元素的引用已因修改而变得陈旧,而不是 .loading 元素。我怀疑异常源自该行,因为它试图在模块的基本元素中搜索以找到 .loading 元素。解决方案是在检查其中的元素的同时加载模块。在这种情况下,它看起来像这样:

//In the content block of SomeModule, which is part of a moduleList on the page:
itemLoaded { !loading.displayed }
loading { $('.loading') }

//in the page definition
moduleItems {index -> moduleList SomeModule, $("#module-list > .item"), index}

//in a test on this page
waitFor { moduleItems(someIndex).itemLoaded }

感谢 geb-user 邮件列表中的 Marcin 为我指明了正确的方向。

关于selenium - geb StaleElementReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12222081/

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