StaleElementReferenceException 是由于页面上的元素在查找或交互时已经过期,最常见的情况是当页面重新加载时或元素被删除时。在使用 WebElement.click() 方法时,我们只是尝试单击该元素,并且如果元素不存在,则会抛出NoSuchElementException。而当使用 Actions.click() 方法时,由于它模拟了更多的用户操作(即鼠标悬停,聚焦等),因此更容易导致元素失效并抛出StaleElementReferenceException。
解决这个问题的常见方法是捕获异常并重试操作。以下是一个示例代码段:
WebElement element = driver.findElement(By.id("myId")); int attempts = 0; while (attempts < 2) { try { Actions actions = new Actions(driver); actions.moveToElement(element).click().perform(); break; } catch (StaleElementReferenceException e) { e.printStackTrace(); } attempts++; }
在这个示例中,我们正在查找一个页面元素,然后使用 Actions.click() 方法单击它。但是,如果抛出 StaleElementReferenceException,则我们会捕获该异常并重试该操作,最多尝试两次。请注意,我们还可以添加其他异常来捕获其他可能发生的异常。