Selenium中如何通过XPath获取非可见元素的id对应文本值
错误原因
- 等待条件选择错误:
ExpectedConditions.visibilityOfElementLocated()用于等待元素可见,要求元素满足DOM中存在、宽高不为0、display属性不为none等可见判定条件。你要定位的元素class为disp-none属于隐藏元素,永远无法满足可见判定,必然触发超时。 - 定位规则属性值不匹配:你的代码里XPath写的是
@id='demandTrackingID',但实际HTML元素的id属性值为TrackID,属性值不匹配导致无法定位到目标元素。
正确实现方案
- 替换等待条件为
presenceOfElementLocated(),该条件仅校验元素存在于DOM树中,不要求元素可见 - 修正定位规则的
id属性值为实际的TrackID - 隐藏元素无法通过
getText()获取文本(该方法默认仅返回可见元素的文本内容),需要调用getAttribute("textContent")获取隐藏元素的文本值
完整代码示例
// 等待元素存在于DOM树中,不需要可见 WebDriverWait wait = new WebDriverWait(driver, 20); // 若id全局唯一,直接用By.id("TrackID")定位效率更高 WebElement trackIdElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("TrackID"))); // 获取隐藏元素的文本值并去除首尾空白字符 String trackId = trackIdElement.getAttribute("textContent").trim(); // 打印结果 System.out.println(trackId);
如果你需要保留原有XPath的层级校验,可将定位规则替换为
By.xpath("//span[contains(@class,'mat-content')]//div[@id='TrackID']")
内容的提问来源于stack exchange,提问作者jay m
相关产品推荐
相关产品推荐

