Как исправить проблему "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 = ...
}