【问题标题】:How to fix "java.lang.IndexOutOfBoundsException: Index: 1, Size: 1" problem如何修复“java.lang.IndexOutOfBoundsException:索引:1,大小:1”问题
【发布时间】:2019-01-25 10:32:06
【问题描述】:

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

在我下面的代码中,当“String text = KpiText.get(i).getText();”第二次打印我得到“java.lang.IndexOutOfBoundsException:索引:1,大小: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);

}

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

【问题讨论】:

  • 在执行 KpiText.get(i) 之前,您必须验证该索引 i 是否存在元素
  • 任何代码更改?
  • 只需在该行之前添加一个 if
  • 您对 userNames 集合和 KpiText 集合使用相同的索引。显然这些集合有不同的大小

标签: java selenium-webdriver appium-android


【解决方案1】:

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

如果你想全部打印出来,你应该这样做:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果您正在迭代 List&lt;WebElement&gt; 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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-13
        • 1970-01-01
        • 1970-01-01
        • 2020-08-30
        相关资源
        最近更新 更多