我正在检查ExpectedCondtions
类的方法,发现了一个方法:刷新
我可以理解,当您获取StaleElementReferenceException
并希望再次检索该元素时,可以使用该方法,这种方法可以避免StaleElementReferenceException
我的上述理解可能不正确,因此我想确认:
1.什么时候应该使用refreshed
?
1.以下代码中something
部分的代码应该是什么:wait.until(ExpectedConditions.refreshed(**something**));
有人能举个例子解释一下吗?
3条答案
按热度按时间qc6wkl3g1#
在尝试访问新刷新的搜索结果时,
refreshed
方法对我非常有帮助。尝试只通过ExpectedConditions.elementToBeClickable(...)
等待搜索结果将返回StaleElementReferenceException
。为了解决这个问题,这是一个帮助器方法,它将等待并重试最多30秒,以使搜索元素被刷新并可点击。然后点击搜索后的结果:
希望这对其他人有帮助。
ztigrdn82#
据来文方称:
条件的 Package 器,允许通过重绘来更新元素。这围绕具有两个部分的条件的问题工作:找到一个元素,然后检查它的某些条件。对于这些情况,可以定位元素,然后随后在客户端上重绘该元素。当发生这种情况时,在检查条件的第二部分时会抛出{@link StaleElementReferenceException}。
所以基本上,这是一个等待直到对象上的DOM操作完成的方法。
通常,当执行
driver.findElement
时,该对象表示该对象是什么。当DOM被操作后,比如说在单击一个按钮后,向该元素添加一个类。如果你尝试对该元素执行一个操作,它将抛出
StaleElementReferenceException
,因为现在返回的WebElement
并不代表更新后的元素。当您希望进行DOM操作,并且希望等到DOM中的操作完成时,可以使用
refreshed
。示例:
button.click()
,它将抛出StaleReferenceException,因为此时DOM已被操作。在我使用Selenium的这些年里,我从来没有使用过这个条件,所以我相信这是一个“边缘情况”,你很可能甚至不必担心使用。希望这有帮助!
bkhjykvo3#
应该是这样的