加了try catch且等待元素可见仍出现Stale Element Exception问题求解
Selenium StaleElementReferenceException 解决方案
你现有方案无效的核心原因是:wait.until(ExpectedConditions.refreshed(ExpectedConditions.stalenessOf(latestId)))执行完成后,你持有的latestId元素实例已经被判定为陈旧失效,后续直接调用getText()必然触发异常。
以下是可行解决方案:
- 方案1:每次操作元素前重新查询,不复用旧的WebElement实例
不要缓存latestId实例跨DOM变更操作使用,每次点击、取值前都通过定位器重新查询元素:// 点击前重新查询元素 WebElement latestId = driver.findElement(By.xpath("你定位该元素的xpath/其他定位方式")); latestId.click(); WebDriverWait wait = new WebDriverWait(driver,10); // 点击后等待元素重新加载为可交互状态 By idLocator = By.xpath("你定位该元素的xpath/其他定位方式"); wait.until(ExpectedConditions.elementToBeClickable(idLocator)); // 重新查询得到新的元素实例再取值 WebElement newLatestId = driver.findElement(idLocator); createdvalue("id", newLatestId.getText()); - 方案2:确认点击操作触发的DOM变更完成后再操作
如果点击会触发表格刷新、页面跳转,先等待页面/表格的父容器加载完成,再查询目标元素:WebElement latestId = driver.findElement(By.xpath("你定位该元素的xpath/其他定位方式")); latestId.click(); WebDriverWait wait = new WebDriverWait(driver,10); // 示例:等待表格父容器加载完成,替换为你实际的表格定位器 wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("tableContainer"))); // 再查询目标元素 WebElement newLatestId = driver.findElement(By.xpath("你定位该元素的xpath/其他定位方式")); createdvalue("id", newLatestId.getText()); - 额外注意:检查拼写错误,你代码里写的
gettexxt()是错误写法,正确方法名为getText(),拼写错误也会引发额外的调用异常。
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

