2017-09-07 59 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()時,都會得到下一個元素AND將光標向前移動。

相反,存儲實例,請檢查並執行它的點擊喜歡:

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

這是一種替代方案,但並沒有真正回答這個問題:「如何使用迭代器_」 – AxelH

+0

@AxelH IMO點擊當前元素,「迭代器」最適合用於我們需要迭代到下一個項目/節點的用例。這裏OP的要求是驗證當前/當前項目/節點中的屬性。因此'for()'似乎是最合適的。是的,它也可以通過'iterator'來實現。 – DebanjanB

+1

這不是我的觀點;)問題是關於'Iterator',僅供參考:** 1)**'for'循環會爲您創建迭代器,所以它正在做同樣的事情,請參閱[this thread]( https://stackoverflow.com/a/18410489/4391450)。 ** 2)**'Iterator'很好地「迭代」一個'Collection'並且能夠更新它(你不能刪除循環中的一個項目,'ConcurrentModificationException'發生)。但也給你一個簡單的解決方案來讀取一個集合,而不用管理長度(與你的相同,但有一個併發訪問,因爲如果需要,你沒有迭代器) – AxelH

相關問題