Как исправить проблему "java.lang.IndexOutOfBoundsException: индекс: 1, размер: 1"

Я пытаюсь перебрать элементы, где я должен получить текстовое тело для каждого элемента, но после того, как напечатано 1-е тело элемента, следующее для следующего тела элемента, я получаю "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);

}

Ожидается, что он должен напечатать тело для всех элементов для итерации.

3 ответа

Решение

Проблема очень проста. Вы используете значение "i" для доступа к массиву "KpiText". В этом случае ваш массив имеет только один элемент, поэтому индекс 1 выходит за пределы, как указано в трассировке стека исключений.

Если вы хотите распечатать их все, вы должны сделать это:

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

Если вы перебираете 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);
}

Похоже, что usernames.size() больше, чем размер KpiText. При обращении к списку KpiText убедитесь, что индекс действительно существует. Так что, возможно, проверка как

if(i < KpiText.size()){
 String text = ...
}
Другие вопросы по тегам