Selenium Java中stalenessOf与invisibilityOf的区别及适用场景咨询
Selenium Java中stalenessOf与invisibilityOf的区别
先直接说核心差异:
- stalenessOf:只关心元素是否彻底脱离当前DOM树——不管元素之前可见与否,只要它的节点被从DOM中移除,或者页面刷新/跳转导致原元素引用失效,这个条件就会满足。
- invisibilityOf:有两种满足情况:要么元素还在DOM树里,但不可见(比如设置了
display:none、visibility:hidden,或者被其他元素完全遮挡、位置移出视口);要么元素已经脱离DOM树。
适用场景区分
用stalenessOf的情况
当你明确需要验证元素已被从DOM中删除,而不是仅仅隐藏时:
- 比如点击删除按钮后,列表项节点被彻底移除;
- 页面刷新/跳转后,之前获取的元素引用必然失效,这时候用
stalenessOf更精准,因为它只校验DOM存在性。
用invisibilityOf的情况
当你需要验证元素不可见,不管它是被隐藏还是被删除时:
- 比如模态框关闭后,模态框元素还留在DOM里,但设置了
display:none; - 表单提交后,加载提示元素被隐藏(而非删除)。
为什么元素消失时两个方法都通过?
因为invisibilityOf的判定逻辑包含了“元素不存在于DOM”这一情况,所以当元素彻底从DOM消失时,两个条件都会满足。但反过来,如果元素只是被隐藏(仍在DOM中),stalenessOf会一直等待超时,而invisibilityOf会立即通过。
代码示例
// 等待元素脱离DOM wait.until(ExpectedConditions.stalenessOf(element)); // 等待元素不可见(或脱离DOM) wait.until(ExpectedConditions.invisibilityOf(element));
内容的提问来源于stack exchange,提问作者Alex Blade
相关产品推荐
相关产品推荐

