ExpectedConditions.refresh 和 ExpectedConditions.stalenessof 有什么区别

What is difference between ExpectedConditions.refresh and ExpectedConditions.stalenessof

你能帮我理解一下ExpectedConditions.refreshExpectedConditions.stalenessOf

ExpectedCondtion.referesh 接受 ExpectedCondtion 作为参数。

假设您有一个文本字段元素,该元素由应用程序操作并重新绘制。通常,您会得到 StaleElementReferenceException,因为当 WebDriver 调用 findElement 方法时,它将 REFERENCE 保存到对象。如果对象被重绘,则对该对象的引用不再是实际的,并且 StaleElementReferenceException 被抛出。

ExpectedCondition.stalenessOf 等到元素被重绘。如果发生 DOM 操作,这可能有助于等待。然后,您可以重新找到您的元素并执行操作(或者使用 PageFactory 创建的元素而不是重新查找它)。

但是,该元素可能会被多次操作(例如通过前端的 jQuery 调用)。在这种情况下,等到元素过时并尝试找到它,可能会抛出 StaleElementReferenceException,因为元素再次过时。

在这种情况下,您可以使用 ExpectedCondition.refresh(<my-expected-condition>)。这将允许您在时间范围内执行操作,而不管元素是否过时