2017-05-05 1 views
0

webdriver를 사용하여 클래스 이름이 topredo 인 웹 요소를 ArrayList로 가져 왔습니다.arraylist 크기가 실제보다 작음

스크롤 할 때 웹 요소가 증가하는 것을 볼 때, 나는 while 루프를 사용하여 스크롤을 잡고 잡습니다. 이 같은

자바 코드 :

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

이 지난 루프까지 잘 실행됩니다. 마지막 secode 루프

나는 all.size() 결과 (208)를 얻을 수 있지만, 브라우저에 웹 요소의 실제의 총 크기 (243) 동안 마지막 루프에서 all.size() 결과는 172이고, I는 목록 스택 볼 이클립스 디버그를 사용 함유량. 이 같은

스크린 샷 :

  • all.size() 지수 171

content end on index 171

all.size()

  • 내용 끝

    내 질문에 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*/ 
} 
관련 문제