Java+Selenium解析表格时Xpath无法定位全部顶级td元素的问题
Selenium XPath定位表格行内td元素的问题解析
问题场景
使用Java + Selenium解析表格时,通过//table[@id='proposalLineItemTable']/tbody/tr定位到id为tr1的行,但调用row.findElements(By.xpath("td"))或row.findElements(By.xpath("./td"))时,仅能找到class为leftBorderSelected的1个td元素;只有使用row.findElements(By.xpath(".//td"))才能获取全部td元素(确认不存在td嵌套td的情况)。
核心原因
这是XPath相对路径的匹配范围差异导致的:
td或./td:仅匹配当前tr节点的直接子节点中的td元素。如果页面DOM里,你的tr下只有那个leftBorderSelected类的td是tr的直接子元素,其他td都被tr内部的其他容器(比如div、span)包裹,那这两种写法自然只能找到1个td。.//td:匹配当前tr节点下所有后代节点中的td元素(无论层级,只要是tr的后代),因此能捕获到全部目标td。
验证方式
右键检查tr1的DOM结构,确认目标td的层级:
- 展开
tr1节点,查看那些未被./td定位到的td是否是tr的直接子元素 - 如果它们被其他元素包裹(比如
<tr><div><td>...</td></div></tr>),就解释了为什么./td无法匹配到它们
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

