"线程" main"中的例外情况java.util.NoSuchElementException"执行以下代码时发生错误。

时间:2014-04-30 11:20:43

标签: java selenium

我在webdriver中编写了一个代码,用于获取选项卡窗口的窗口ID,但代码会引发异常。     "线程" main"中的例外情况java.util.NoSuchElementException"执行以下代码时发生错误。

import java.util.Iterator;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class web_windows {

    public static void main(String[] args) {

        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.icicibank.com/");
        Set<String> winids = driver.getWindowHandles();
        Iterator<String> iterate = winids.iterator();

        System.out.println(iterate.next());

        driver.findElement(By.xpath("//*[@id='footer_container']/p/a[1]")).click();
        winids = driver.getWindowHandles();
        iterate = winids.iterator();
        String firstwindow = iterate.next(); // window id of main window

        String tabwindow = iterate.next();  // window id of tabbed window
        // main tab 
        System.out.println(firstwindow);
        // tabbed window
        System.out.println(tabwindow);





    }

}

在执行上述代码后,出现以下错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(Unknown Source)
    at java.util.LinkedHashMap$KeyIterator.next(Unknown Source)
    at web_windows.main(web_windows.java:

2 个答案:

答案 0 :(得分:1)

在访问之前,您必须检查它是否存在

while(iterate.hasNext()){
String firstwindow = iterate.next();
}

文档说明

boolean hasNext()

  

如果迭代有更多元素,则返回true。 (换句话说,如果next()返回一个元素而不是抛出异常,则返回true。)

     

返回:   如果迭代具有更多元素,则为true

iterate.next()

  

抛出:   NoSuchElementException - 如果迭代没有更多元素

这就是你的情况。

答案 1 :(得分:0)

我认为你的winids是空的,很可能你的xpath是错误的,没有看看我建议你测试你的xpath的网页,可能在你的浏览器中使用jquery和一个javascript控制台