繁体   English   中英

Java增强了循环和IndexOutOfBoundsException吗?

[英]Java enhanced for loop and IndexOutOfBoundsException?

使用Java增强的for loop时为什么会出现IndexOutOfBoundsException ?我的代码如下所示

for (WebElement input : driver.findElements(By.cssSelector("input[type='text']"))) {
    if (input.isDisplayed()) {
        input.clear();
    }
}

它使用Selenium WebDriver查找所有<input type="text" />标记,并在显示时清除它们的内容(否则将引发不同的异常)。 在一些测试中

java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:604)
    at java.util.ArrayList.get(ArrayList.java:382)

堆栈跟踪的其余部分位于Pastebin上

编辑

即使我添加了对数组为空的检查,仍然会发生此错误

List<WebElement> inputs = driver.findElements(By.cssSelector("input[type='text']"));
if (!inputs.isEmpty()) {
     for(WebElement input : inputs) {
     }
}
    java.lang.IndexOutOfBoundsException: Index: 1, Size: 0

这指定您已在索引1处进入循环,尽管数组的大小为0。您应在索引0处输入。这很奇怪。 所以这表明该错误是由下面的抛出


尝试运行一些调试-在此之前,请尝试打印由返回的对象

    driver.findElements(By.cssSelector("input[type='text']"))

并尝试查看是否实际返回了任何内容。

我会发表评论,但没有足够的代表。

这也是一个for-each循环。

您可以检查此语句的结果driver.findElements(By.cssSelector("input[type='text']"))

似乎driver.findElement s甚至在增强循环开始执行之前就获得了indexOutOfBound异常。 您可以尝试在控制台上调试或打印该值吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM