Java 在缓存中找不到元素-Selenium

Java 在缓存中找不到元素-Selenium,java,selenium-webdriver,Java,Selenium Webdriver,我有一个URL列表,我只想在同一个浏览器会话中打开该URL。为此,我编写了以下代码,但它在打开第一个URL后抛出错误,即第二个URL未被打开 findElements = driver.findElements(By.xpath("//*[@id='search-user-found']//p/a")); for (WebElement webElement : findElements) { Thread.sleep(200); System.out.println(web

我有一个URL列表,我只想在同一个浏览器会话中打开该URL。为此,我编写了以下代码,但它在打开第一个URL后抛出错误,即第二个URL未被打开

findElements = driver.findElements(By.xpath("//*[@id='search-user-found']//p/a"));

for (WebElement webElement : findElements) 
{
    Thread.sleep(200);
    System.out.println(webElement.getAttribute("href"));
    driver.navigate().to(webElement.getAttribute("href"));
    Thread.sleep(200);
}
错误:

Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up

请协助。

当您导航到另一个页面时,DOM正在更改,
WebDriver
正在丢失它以前定位的元素。这会导致
StaleElementReferenceException
。我建议您将链接保存为字符串并使用它们

List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='search-user-found']//p/a"));
List<String> hrefs = new List<String>();

for (WebElement webElement : findElements) 
{
    hrefs.add(webElement.getAttribute("href"));
}

for (String href : hrefs) 
{
    Thread.sleep(200);
    System.out.println(href);
    driver.navigate().to(href);
    Thread.sleep(200);
}
List findElements=driver.findElements(By.xpath(“//*[@id='search-user-found']///p/a”);
List hrefs=新列表();
for(WebElement WebElement:findElements)
{
添加(webElement.getAttribute(“href”);
}
for(字符串href:hrefs)
{
睡眠(200);
System.out.println(href);
driver.navigate().到(href);
睡眠(200);
}

下面是另一个非常好、清晰的答案: