如何修复 "java.lang.IndexOutOfBoundsException: Index: 1, Size: 1" 问题

How to fix "java.lang.IndexOutOfBoundsException: Index: 1, Size: 1" problem

我正在尝试迭代元素,其中我必须为每个元素获取文本正文,但是在打印第一个元素正文之后,下一个元素正文我得到 "java.lang.IndexOutOfBoundsException: Index: 1, Size: 1"。我知道这是非常简单的修复,但我无法修复它。请帮我解决这个问题。

在我下面的代码中,当 "String text = KpiText.get(i).getText();" 第二次打印时,我收到 "java.lang.IndexOutOfBoundsException: Index: 1, Size: 1" 错误。

public void checkKPIValuesForTeam() throws InterruptedException{


        List<WebElement> userNames = DifferentUsers.findElements(By.xpath("//div[@class='radio sfa-radio-red']"));
        System.out.println(userNames.size());

       int maxLength = userNames.size();

       for(int i=0;i<maxLength;i++){

        WebElement namesOfUsers = userNames.get(i);
        System.out.println(namesOfUsers);
        namesOfUsers.click();

        List<WebElement> KpiText = KPIValues.findElements(By.xpath("//*[@id='main-content-app']/div/div[2]/div/div/div[2]/div[2]/div[1]/div/div[1]"));
        System.out.println(KpiText.size());
        String text = KpiText.get(i).getText();
        System.out.println(text);

}

预计它应该打印所有迭代元素的主体。

问题很简单。您正在使用值 "i" 访问 "KpiText" 数组。 在这种情况下,您的数组只有一个元素,因此索引 1 超出范围,如异常堆栈跟踪所述。

如果你想打印它们,你应该这样做:

for (WebElement element : KpiText)
   System.out.println(element.getText());

似乎usernames.size() 大于KpiText 的大小。引用 KpiText 列表时,请确保索引确实存在。所以也许像

这样的支票
if(i < KpiText.size()){
 String text = ...
}

如果您要遍历 List<WebElement> KpiText,最好这样做:

   List<WebElement> KpiText = KPIValues.findElements(By.xpath("//*[@id='main-content-app']/div/div[2]/div/div/div[2]/div[2]/div[1]/div/div[1]"));

   for(int i=0; i < KpiText.size() - 1; i++){

    WebElement namesOfUsers = userNames.get(i);
    System.out.println(namesOfUsers);
    namesOfUsers.click();

    System.out.println();
    String text = KpiText.get(i).getText();
    System.out.println(text);
}