Chrome控制台XPath查找元素首次失败,二次查找成功原因咨询
为什么页面加载完成后用
$x("//img[@title='Support Center']")找不到元素,右键检查后又能成功定位? 这个问题我之前排查过好几次,大概率是下面几种场景之一:
元素是动态加载的:页面初始渲染完成时,目标
img元素还没被创建出来——可能是页面通过AJAX拉取数据后才生成它,或者需要触发滚动/hover这类交互事件才会加载,甚至是延迟几毫秒后由JS动态插入DOM的。你刚加载完页面就执行$x查询,这时候元素还不存在,自然返回空数组。而当你右键点击「检查」时,要么是你等待的这几秒足够元素加载完成,要么是右键操作间接触发了元素的加载逻辑,这时候再执行xpath查询就能找到它了。元素位于iframe内部:如果这个
img是嵌套在某个<iframe>标签里的,直接在主页面的控制台执行$x是无法查询到iframe内部DOM元素的(因为iframe拥有独立的文档上下文)。但当你右键检查这个元素时,Chrome开发者工具会自动切换到该iframe对应的上下文环境,这时候你再执行$x,就是在iframe的文档中进行查找,所以能成功定位到目标元素。元素的title属性是动态赋值的:页面加载时,这个
img的title属性还不是Support Center,是后续通过JavaScript代码动态设置的。你刚加载完页面执行xpath查询时,属性不匹配所以找不到;等到你右键检查的时候,title属性已经被正确赋值,xpath条件匹配,就能找到元素了。
内容的提问来源于stack exchange,提问作者Gal Evgeniy
相关产品推荐
相关产品推荐

