2017-09-07 6 views
1

필자는 반복기를 사용하여 스캔해야하는 요소 목록을 가지고 원하는 요소를 클릭합니다. 내 코드에서 반복자를 사용하여 현재 요소를 클릭하는 방법

List <WebElement> lt = driver.findElements(By.tagName("strong")); 
 
\t \t Iterator <WebElement> it= lt.iterator(); 
 
\t \t while(it.hasNext()) 
 
\t \t { 
 
\t \t \t if(it.next().getText().equals(cat)) 
 
\t \t \t { 
 
\t \t \t \t it.next().click(); 
 
\t \t \t \t break; 
 
\t \t \t } 
 
\t \t }
는 반복자가 요소를 발견하면, 실행이 경우 루프 내부에 간다, 그러나 it.next().click(); 가 발생했을 때 나는 현재를 클릭 어떻게, 다음 요소를 선택 if 루프가 가리키는 요소?

답변

2

it.next()에 전화 할 때마다 다음 요소 을 앞에 놓습니다.

대신, 인스턴스를 저장하는 검사를하고 실행 그것에 클릭 좋아 :

WebElement e; 
while(it.hasNext()) 
    e = it.next(); 
    if(e.getText().equals(cat)) { 
     e.click(); 
    } 
} 
2

을 다음과 같이 쉬운 방법 우리의 요구를 수용 할 수있는 for() 루프를 사용 :

List <WebElement> lt = driver.findElements(By.tagName("strong")); 
    for(WebElement it:lt) 
    { 
     String my_text = it.getText(); 
     if(my_text.contentEquals("cat")) 
     { 
      it.click(); 
      break; 
     } 
    } 
+0

그건 대안입니다, 그러나 실제로 "iterator_를 사용하여 현재 요소를 어떻게 클릭합니까?"라는 질문에 대답하지 않습니다. – AxelH

+0

@AxelH IMO, iterator는 다음 항목/노드로 반복해야하는 경우에 가장 적합합니다. 여기서 OP의 요구 사항은 현재/현재 항목/노드의 속성을 확인하는 것입니다. 그러므로'for()'가 가장 적합하다고 생각됩니다. 예, iterator를 통해서도 가능합니다. – DebanjanB

+1

그건 내 요점이 아니 었습니다;) 질문은'Iterator'에 대한 것입니다, 참고 ** : ** 1) ** for 루프는 반복자를 생성 할 것이므로 똑같은 일을합니다. [this thread] https://stackoverflow.com/a/18410489/4391450). ** 2) **'Iterator'는'Collection'을 "반복"하고 그것을 갱신 할 수 있습니다 (당신의 루프에서 항목을 제거 할 수 없습니다,'ConcurrentModificationException'이 발생합니다). 또한 길이를 관리하지 않고 모음을 읽을 수있는 간단한 솔루션을 제공합니다 (필요에 따라 반복기가 없기 때문에 귀하의 것과 같지만 동시에 액세스 할 수 있음) – AxelH

관련 문제