Java 在缓存中找不到元素-Selenium
我有一个URL列表,我只想在同一个浏览器会话中打开该URL。为此,我编写了以下代码,但它在打开第一个URL后抛出错误,即第二个URL未被打开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
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);
}
下面是另一个非常好、清晰的答案: