
在 selenium 中,使用 `parent.findelement(by.xpath())` 查找子元素时,必须使用**相对 xpath(以 `.` 开头)**,否则会从整个页面根节点搜索,导致定位错误或返回非预期元素。
在自动化测试或网页抓取中,我们常需要在一个已定位的父元素(WebElement parent)范围内查找其子元素。看似简单的 parent.findElement(By.xpath(xpath)) 实际上存在一个关键陷阱:XPath 表达式默认是全局的。
❌ 错误理解:// 总是“从父元素开始”
XPath 中的 // 表示“从文档任意位置向下查找”,无论调用对象是 driver 还是 parent —— 只要表达式以 // 开头,Selenium 就会忽略调用上下文,直接在整个 DOM 中搜索。例如:
WebElement parent = driver.findElement(By.id("container"));
WebElement child = parent.findElement(By.xpath("//button")); // ⚠️ 错误!仍匹配全页第一个 button即使 parent 是
...
,该代码仍可能返回页面顶部某个无关的