我在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:
答案 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控制台