Arraylist上的java.util.NoSuchElementException

Arraylist上的java.util.NoSuchElementException,java,selenium,while-loop,iterator,Java,Selenium,While Loop,Iterator,尝试从页面中查找断开的链接,为此,我从网页中获取所有可用的链接,然后通过循环逐个检查,但得到以下错误。没有得到任何理想的请帮助我解决这个错误 以下是我的代码: List<WebElement> links = driver.findElements(By.tagName("a")); System.out.println("Total no. of links are: "+ links.size());

尝试从页面中查找断开的链接,为此,我从网页中获取所有可用的链接,然后通过循环逐个检查,但得到以下错误。没有得到任何理想的请帮助我解决这个错误

以下是我的代码:

                List<WebElement> links = driver.findElements(By.tagName("a"));
            System.out.println("Total no. of links are: "+ links.size());
            java.util.Iterator<WebElement> it = links.iterator();

            while(it.hasNext()){

                url = it.next().getAttribute("href");
                urlname=it.next().getText();

                if(url == null || url.isEmpty()){
                    System.out.println(urlname +" - "+url+ ": URL is either not configured for anchor tag or it is empty");
                    continue;
                }

               /* if(!url.startsWith(homePage)){
                  System.out.println("URL belongs to another domain, skipping it.");
                  continue;
                } */

                try {
                    huc = (HttpURLConnection)(new URL(url).openConnection());                       
                    huc.setRequestMethod("HEAD");                       
                    huc.connect();                      
                    respCode = huc.getResponseCode();

                    if(respCode >= 400){
                        System.out.println(urlname +" - "+ url +": is a broken link");
                    }
                    else{
                       // System.out.println(url+" is a valid link");
                    }

                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

不要在循环的同一次迭代中推进
迭代器两次

使用变量存储从
迭代器获得的下一个元素:

Iterator<WebElement> it = links.iterator();
while (it.hasNext()) {
    WebElement element = it.next();
    url = element.getAttribute("href");
    urlname =e lement.getText();
    ...
}
Iterator it=links.Iterator();
while(it.hasNext()){
WebElement=it.next();
url=element.getAttribute(“href”);
urlname=e element.getText();
...
}

it.next()只需调用一次(将其保存到变量)。否则,它将前进到下一个元素。使用当前代码,您可以在每次迭代时前进2次。

您可以在不需要自己管理迭代器的地方尝试以下代码

List<WebElement> links = driver.findElements(By.tagName("a"));
for(WebElement element:links){
url = element.getAttribute("href");
urlName = element.getText();
...
...
}


List links=driver.findElements(按.tagName(“a”));
for(WebElement:links){
url=element.getAttribute(“href”);
urlName=element.getText();
...
...
}
List<WebElement> links = driver.findElements(By.tagName("a"));
for(WebElement element:links){
url = element.getAttribute("href");
urlName = element.getText();
...
...
}