【问题标题】:Getting Stale Element Reference Exception while accessing the element from a list访问列表中的元素时获取过时元素引用异常
【发布时间】:2021-09-16 07:37:52
【问题描述】:

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

//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。该代码在第一个链接之前一直有效,但是一旦加载了第一页,它就会给我陈旧的元素异常。

【问题讨论】:

  • 欢迎来到 SO。请发布您遇到的错误。
  • 嗨@DmitriyPopov。谢谢你的评论。当我离开提取所有链接的页面时,我遇到了过时的元素异常。通过使用 Prophet 发布的解决方案,我能够达到预期的结果。

标签: java selenium webdriver


【解决方案1】:

此时,您要离开所有这些链接出现的页面,allURLs 列表中的所有 Web 元素都成为过时的元素。
您可以做的是首先提取所有链接并将其保存在列表中,而不是 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);
}

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 2013-12-03
    • 2017-12-24
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多