为何invisibilityOfElementLocated()比invisibilityOf()性能更优?
invisibilityOfElementLocated(By.<locator>)比invisibilityOf(<web_element>)性能更好? 这俩方法的性能差异核心在于定位时机和等待逻辑的底层实现,具体拆解如下:
避免不必要的预定位开销
使用invisibilityOf(<web_element>)的前提是你已经提前通过findElement()获取了目标元素的引用。如果目标元素一开始就处于不可见/未加载状态,这步预定位会触发隐式等待超时,平白浪费大量时间。而invisibilityOfElementLocated(By.<locator>)把「定位元素+检查不可见」整合在同一个等待逻辑里,只有当元素出现且可见时才会继续等待,不存在预定位的无效等待开销。等待逻辑的容错性与效率更高
invisibilityOfElementLocated的判断逻辑是双重的:要么元素在DOM中找不到(符合不可见判定),要么找到后元素可见性为false。这种逻辑可直接覆盖「元素未渲染」和「元素已渲染但不可见」两种场景,不需要额外处理异常。
而invisibilityOf只能检查已存在于DOM中的元素的可见性,如果元素被从DOM中移除,它会抛出StaleElementReferenceException,后续还要重新定位元素,额外增加了异常处理和重复定位的成本。无 stale 元素引用的维护成本
提前获取的WebElement会持有对DOM节点的强引用,一旦页面刷新、重渲染,这个引用就会失效。invisibilityOf在等待过程中需要持续校验这个引用的有效性,而invisibilityOfElementLocated每次检查都会通过定位器重新查找元素,不依赖旧的DOM引用,也就没有维护引用的额外资源消耗。
内容的提问来源于stack exchange,提问作者TTDS

