线程“main”中的异常java.lang.IndexOutOfBoundsException:索引:0,大小:0错误

时间:2015-10-14 09:21:45

标签: java if-statement try-catch

我正在尝试查找所有这些元素并在找到它们后单击它们但在线程“main”java.lang.IndexOutOfBoundsException中遇到Exception错误:索引:0,大小:0我不知道是什么我的错误是。

            try {
                while(clickMore == true) {
                List<WebElement> commentsbutton = comment.findElements(By.className("UFIPagerLink"));
                List<WebElement> repliesbutton = comment.findElements(By.className("UFIReplySocialSentenceLinkText"));
                List<WebElement> seemorebutton = comment.findElements(By.className("_1n4g"));
                if(commentsbutton.size() > 0 || repliesbutton.size() > 0 || seemorebutton.size() > 0 ) {
                    commentsbutton.get(0).click();
                    repliesbutton.get(0).click();
                    seemorebutton.get(0).click();
                    Thread.sleep(4000);
                }
                else clickMore = false;
                } 
            } catch (NoSuchElementException e) {
                System.out.println("Elements in this post not found");
            }

4 个答案:

答案 0 :(得分:3)

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

这清楚地说明你的commentsbutton是空的而且没有元素。但是你试图获得索引0的元素,而不是那里。

您必须考虑更改if条件,以避免异常。

答案 1 :(得分:3)

你的病情有误。如果commentsbutton.get(0),您只能安全地访问commentsbutton.size() > 0

将其更改为:

            if(commentsbutton.size() > 0 && repliesbutton.size() > 0 && seemorebutton.size() > 0 ) {
                commentsbutton.get(0).click();
                Thread.sleep(4000);
            }

            if(commentsbutton.size() > 0) {
                commentsbutton.get(0).click();
                Thread.sleep(4000);
            }

取决于所需的逻辑。

答案 2 :(得分:1)

||表示“或”,因此此代码:

if(commentsbutton.size() > 0 || repliesbutton.size() > 0 || seemorebutton.size() > 0 ) {
    commentsbutton.get(0).click();
    Thread.sleep(4000);
}

...说“如果commentsbutton的尺寸> 0 repliesbutton的尺寸&gt; 0 seemorebutton的尺寸> 0,从commentsbutton获取第一项。“那么,如果commentsbutton为空但repliesbutton中有内容,该怎么办?你会得到你得到的错误。

您的意思可能是&&(“和”)而不是||(“或”),或者您可能只是想检查commentsbutton而不是其他人。

答案 3 :(得分:0)

在您尝试访问or

中的first元素之前,您正在执行list条件
if(commentsbutton.size() > 0 || repliesbutton.size() > 0 || seemorebutton.size() > 0 )

在这种情况下,由于它是or条件,因此只有一个条件必须为true才能执行该块。

在尝试访问该元素之前,将其更改为and条件,或仅为size检查commentsButton