0

为什么我IndexOutOfBoundsException在使用 Java 增强的 for 循环时会得到这样的结果?我的代码看起来像这样

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) {
     }
}
4

2 回答 2

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

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


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

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

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

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

它也是一个 for-each 循环。

于 2013-06-18T11:02:52.183 回答
0

你能检查一下这个语句的结果吗driver.findElements(By.cssSelector("input[type='text']"))

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

于 2013-06-18T07:02:19.337 回答