迭代器方法中的java.util.NoSuchElementException
我对编码比较陌生 下面是我的程序代码,它打开一个窗口(flipkart.com)>点击网页内的图标进入第二个窗口。现在我想为第一页和第二页生成窗口句柄,但它会给我以下给出的错误 计划:迭代器方法中的java.util.NoSuchElementException,java,selenium,selenium-webdriver,nosuchelementexception,window-handles,Java,Selenium,Selenium Webdriver,Nosuchelementexception,Window Handles,我对编码比较陌生 下面是我的程序代码,它打开一个窗口(flipkart.com)>点击网页内的图标进入第二个窗口。现在我想为第一页和第二页生成窗口句柄,但它会给我以下给出的错误 计划: package MoinPrograms; import java.util.Iterator; import java.util.Set; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.open
package MoinPrograms;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class MouseOverActions {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://www.flipkart.com/");
driver.manage().timeouts().implicitlyWait(3000, TimeUnit.SECONDS);
driver.findElement(By.xpath("// button [@class=\"_2AkmmA _29YdH8\"]")).click();
driver.findElement(By.xpath("//p [@class=\"_1AuloC\"and text()= \"Mobiles & Tablets\"]")).click();
Set<String> FlipKart = driver.getWindowHandles();
Iterator<String> k = FlipKart.iterator();
String handle1 = k.next();
String handle2 = k.next();
System.out.println(handle1);
System.out.println(handle2);
}
}
使用
while
-循环确保获取所有元素:
Iterator<String> k = FlipKart.iterator();
while (k.hasNext()) {
String handle = k.next();
System.out.println(handle);
}
Iterator k=FlipKart.Iterator();
while(k.hasNext()){
字符串句柄=k.next();
系统输出打印LN(手柄);
}
您需要使用hasNext()方法检查您的列表,以确保它有一个元素
包装云纹图;
导入java.util.Iterator;
导入java.util.Set;
导入java.util.concurrent.TimeUnit;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.firefox.FirefoxDriver;
公共类鼠标指针{
公共静态void main(字符串[]args){
WebDriver=newfirefoxdriver();
driver.manage().window().maximize();
驱动程序。获取(“https://www.flipkart.com/");
driver.manage().timeouts().implicitlyWait(3000,TimeUnit.SECONDS);
findElement(By.xpath(“//button[@class=\”“\u 2AkmmA\u 29YdH8\”))。单击();
findelelement(By.xpath(“//p[@class=\“\u 1AuloC\”和text()=\“Mobiles&Tablets\”))。单击();
设置FlipKart=driver.getWindowHandles();
迭代器k=FlipKart.Iterator();
while(k.hasNext()){
字符串handle1=k.next();
系统输出打印LN(handle1);
}
}
}
代码中只有一个句柄可用:
您可以使用以下代码获得它:
ArrayList<String> flipkart = new ArrayList<String>(driver.getWindowHandles());
Iterator<String> k = flipkart.iterator();
while (k.hasNext()) {
String handle = k.next();
System.out.println(handle);
}
ArrayList flipkart=新的ArrayList(driver.getWindowHandles());
迭代器k=flipkart.Iterator();
while(k.hasNext()){
字符串句柄=k.next();
系统输出打印LN(手柄);
}
java.util.nosuchelementexception
根据的Java文档,由各种访问器方法抛出,以指示所请求的元素不存在
现在,如果您查看方法的Java文档,它清楚地提到next()方法返回迭代中的下一个元素,或者如果迭代没有更多元素,则返回NoSuchElementException
问题的根本原因
在您的用例中,java.util.NoTouchElementException的根本原因如下所示:
System.setProperty("webdriver.gecko.driver", "C:\\path\\to\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.flipkart.com/");
driver.manage().timeouts().implicitlyWait(3000, TimeUnit.SECONDS);
driver.findElement(By.xpath("// button [@class=\"_2AkmmA _29YdH8\"]")).click();
driver.findElement(By.xpath("//p [@class=\"_1AuloC\"and text()= \"Mobiles & Tablets\"]")).click();
Set<String> FlipKart = driver.getWindowHandles();
Iterator<String> k = FlipKart.iterator();
String handle1 = k.next();
System.out.println(handle1);
方法无法按照代码中的next()
返回任何元素:MouseOverActions.java:24
String handle2 = k.next();
的元素前后
只有一个窗口句柄,String handle1
被分配了窗口句柄。因为没有第二个窗口句柄可用String handle2=k.next()
引发java.util.nosuchelementexception
解决方案
您需要对自己的代码进行以下调整:
- 删除代码行:
String handle2 = k.next();
System.out.println(handle2);
- 删除代码行:
String handle2 = k.next();
System.out.println(handle2);
- 当Firefox浏览器以最大化模式打开时,您无需进一步
最大化它,因此删除该行:
driver.manage().window().maximize();
- 将Selenium Java客户端更新为v3.12.0,并将以下JVM属性用于GeckoDriver:
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
- 您自己打印窗口句柄的代码块如下所示:
System.setProperty("webdriver.gecko.driver", "C:\\path\\to\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("https://www.flipkart.com/"); driver.manage().timeouts().implicitlyWait(3000, TimeUnit.SECONDS); driver.findElement(By.xpath("// button [@class=\"_2AkmmA _29YdH8\"]")).click(); driver.findElement(By.xpath("//p [@class=\"_1AuloC\"and text()= \"Mobiles & Tablets\"]")).click(); Set<String> FlipKart = driver.getWindowHandles(); Iterator<String> k = FlipKart.iterator(); String handle1 = k.next(); System.out.println(handle1);
在这里,您可以找到关于首次进入页面时如何处理登录弹出窗口的详细讨论?可能是您的代码找不到元素,因为它首先显示一个登录弹出窗口。