据消息人士透露:
条件的包装器,允许元素通过重绘进行更新。这解决了条件的问题,条件分为两部分:找到一个元素,然后检查它的某些条件。对于这些情况,可能会找到一个元素,然后随后在客户端上重新绘制它。发生这种情况时,在检查条件的第二部分时,将引发 {@link StaleElementReferenceException}。
所以基本上,这是一个等到对对象的DOM操作完成的方法。
通常,当您执行此操作时,该对象表示该对象是什么。driver.findElement
当 DOM 操作完毕后,在单击按钮后说,向该元素添加一个类。如果您尝试对所述元素执行操作,它将抛出,因为现在返回的现在不代表更新的元素。StaleElementReferenceException
WebElement
当您期望发生 DOM 操作,并且希望等到 DOM 中完成操作时,您将使用。refreshed
例:
<body>
<button id="myBtn" class="" onmouseover="this.class = \"hovered\";" />
</body>
// pseudo-code
1. WebElement button = driver.findElement(By.id("myBtn")); // right now, if you read the Class, it will return ""
2. button.hoverOver(); // now the class will be "hovered"
3. wait.until(ExpectedConditions.refreshed(button));
4. button = driver.findElement(By.id("myBtn")); // by this point, the DOM manipulation should have finished since we used refreshed.
5. button.getClass(); // will now == "hovered"
请注意,如果您在第 3 行执行 say a button.click(),
它将抛出一个 StaleReferenceException,因为此时 DOM 已纵。
在我使用硒的这些年里,我从来没有使用过这种情况,所以我相信这是一个“边缘情况”的情况,你很可能甚至不必担心使用。希望这有帮助!