问题原因分析
1. 两个等待条件的核心差异
presence_of_element_located仅校验元素是否存在于DOM树中,不校验可见性,只要页面加载时把元素写入DOM就会返回成功,所以不会触发超时。visibility_of_element_located的校验规则要严格得多,需要同时满足:
- 元素存在于DOM树
- 元素的
display属性不为none - 元素的
visibility属性为visible - 元素的宽高都大于0
- 元素没有被其他浮层(如加载遮罩、弹窗)遮挡
2. 下拉框触发超时的根本原因
你测试的站点使用了自定义样式的下拉框组件,这类组件的常规实现逻辑是隐藏原生<select>标签,用div、ul等元素模拟下拉框的外观和交互,原生的#days、#months、#years这些