2017-05-05 82 views
0

我使用webdriver將類名爲topredo的Web元素截獲到ArrayList中。數組列表大小小於實數

看到網頁元素在屏幕滾動時不斷增加,我使用while循環做滾動和抓取。

的Java代碼:

outer: while (isContinue) {  
     List<WebElement> all = driver.findElements(By.className("torpedo")); 
     /* do screen scrolling*/ 
} 

它運行順利,直到最後的循環。

在最後secode循環,我得到的all.size()結果208,但在最後的循環中,all.size()結果是172,而網絡元素的瀏覽器的實際總規模是243,我用eclipse調試即可看到該列表堆棧內容。

屏幕截圖所示:

  • all.size()

all.size()

  • 上索引171

content end on index 171

內容結束

所以我的問題是爲什麼all.size()小於the real size,以及爲什麼索引大於171的內容是不可見的?

非常感謝!

+0

提供更多信息:1.您準確的測試步驟是什麼? 2.什麼對你有用?顯示代碼。 3.你卡在哪裏?提供錯誤堆棧跟蹤。 4.提供相關的HTML DOM。 – DebanjanB

+0

你一遍又一遍地重置'all' ...爲什麼不直接滾動,直到你知道你已經完成滾動,然後進行一次調用來設置'all = driver.findElements(By.className(「torpedo」)) );'在循環之後?這可能會解決您在設置元素之前最後一次發生滾動問題。很難肯定地說,因爲我沒有看到你的'isContinue'正在做什麼或者你的循環邏輯的其他部分。 :) – mrfreester

回答

0

正如在評論中提到的那樣,您一直在爲循環的每次迭代重置列表。我們可以在循環外啓動列表,並不斷向循環內的列表添加元素。代碼應該看起來像這樣。

List<WebElement> all = null; 
outer: while (isContinue) 
{  
    all.addAll(driver.findElements(By.className("torpedo"))); 
    /* do screen scrolling*/ 
} 

您也可以使用一組而不是列表如果列表中的重複元素。

Set<WebElement> all = null; 
outer: while (isContinue) 
{  
    all.addAll(driver.findElements(By.className("torpedo"))); 
    /* do screen scrolling*/ 
}