Java增强了for循环和IndexOutOfBoundsException?

时间:2013-06-18 07:00:19

标签: java loops selenium indexoutofboundsexception

为什么我在使用Java增强版for循环时获得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) {
     }
}

2 个答案:

答案 0 :(得分:1)

    java.lang.IndexOutOfBoundsException: Index: 1, Size: 0

这指定您已在索引1处输入循环,但数组的大小为0.您应该在索引0处输入。这很奇怪。所以这表明错误是由引发的,见下文


尝试并运行一些调试 - 在此之前,尝试打印

返回的对象
    driver.findElements(By.cssSelector("input[type='text']"))

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

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

这也是一个for-each循环。

答案 1 :(得分:0)

您可以查看此声明的结果driver.findElements(By.cssSelector("input[type='text']"))

即使在增强循环开始执行之前,似乎driver.findElement s正在获得indexOutOfBound异常。您可以尝试在控制台上调试或打印该值。