我刚刚开始使用带有 webdriver 的 geb 进行自动化测试。 据我了解,当我在页面上定义内容时,每次调用内容定义时都应该查找页面元素。
//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源代码的指针也很有用。