从列表访问元素时获取陈旧元素引用异常

Getting Stale Element Reference Exception while accessing the element from a list

下面是我试图开始工作的代码。

//Method to fetch all links from the sitemap container

public void GetAllLinks() {

        WebElement pointer = LinksContainer;
        String url = "";
        List <WebElement> allURLs = pointer.findElements(By.tagName("a"));
        System.out.println("Total links on the page: "+ allURLs.size());

        for (int i=0; i<allURLs.size(); i++) {
            
            WebElement link = allURLs.get(i);
            url = link.getAttribute("href");
            
            OpenAllLinks(url);
        }
    }
    
    
    //Method to hit all the fetched URLs
    
    public void OpenAllLinks(String linkURL) {
        
        driver.get(linkURL);
}

我正在从站点地图页面获取所有锚点元素,然后将所有这些元素放入列表中。然后,我使用 getAttribute(href) 从所有这些元素中获取 URL。到这里为止代码运行良好。

然而,之后我将这些 URL 作为参数传递给方法 OpenAllLinks() 以使用 driver.get() 一个一个地打开所有这些 URL。该代码一直有效到第一个 link,但是一旦加载第一页,它就会给我陈旧的元素异常。

目前您正在离开显示所有这些链接的页面 allURLs 列表中的所有 Web 元素都变成了陈旧元素。
您可以做的是首先提取所有链接而不是网络元素并将其保存在列表中,然后循环打开所有这些链接。
像这样:

public void GetAllLinks() {

    WebElement pointer = LinksContainer;
    String url = "";
    List <WebElement> allURLs = pointer.findElements(By.tagName("a"));
    System.out.println("Total links on the page: "+ allURLs.size());
    List<String>links = new ArrayList<>();

    for (int i=0; i<allURLs.size(); i++) {
            
        WebElement link = allURLs.get(i);
        url = link.getAttribute("href");
        links.add(url);    
    }

    for (int i=0; i<links.size(); i++) {
            
        OpenLink(links.get(i));
    }
}
    
    
//Method to open the fetched URLs
    
public void OpenLink(String linkURL) {        
    driver.get(linkURL);
}