Groovy 在迭代期间更改所有列表项

Groovy 在迭代期间更改所有列表项,groovy,Groovy,问题 我需要在循环期间更改所有列表项。可能吗 代码 List<WebElement> elements = driver.findElements(By.xpath('//*[@id="id1"]//tr[td/a]')) elements.eachWithIndex { element, index -> ... if(...) { ... i = index+1 elements = driver.findEl

问题

我需要在循环期间更改所有列表项。可能吗

代码

List<WebElement> elements = driver.findElements(By.xpath('//*[@id="id1"]//tr[td/a]'))
elements.eachWithIndex { element, index ->
    ...
    if(...) {
        ...
        i = index+1
        elements = driver.findElements(By.xpath('//*[@id="id1"]//tr[td/a][position()>' + i + ']')) // new list content which must be use by loop
    }
}
List elements=driver.findElements(By.xpath('//*[@id=“id1”]///tr[td/a]'))
elements.eachWithIndex{element,index->
...
如果(…){
...
i=指数+1
elements=driver.findElements(By.xpath('/*[@id=“id1”]///tr[td/a][position()>'+i+'])//循环必须使用的新列表内容
}
}
但是,循环不使用新列表

你能帮我解释一下为什么吗

谢谢

问候

编辑1

我每次都需要检索元素

List<WebElement> elements = driver.findElements(By.xpath('//*[@id="dzA26"]//tr[td/a]'))
for(int i = 1; i <= elements.size(); i++) { 
    WebElement element = driver.findElement(By.xpath('//*[@id="dzA26"]//tr[td/a][' + i + ']'))
    ...
}
List elements=driver.findElements(By.xpath('//*[@id=“dzA26”]///tr[td/a]'))

对于(inti=1;i,首先,在迭代列表时,更改或删除元素是不安全的。这是可能的,但应该避免。 这是因为您正试图更改它当前正在迭代的元素。因此“.each”闭包后面的迭代器会变得混乱,并且不知道在当前迭代之后要去哪里

如果必须使用相同的操作更改所有元素,则可以使用groovy提供的List.collect()闭包,它将在新列表中返回您想要的任何内容

e、 g:

List elements=elements.collect{element->
返回元素doSomething()
}
编辑1

更新之后,出现了一个新问题,因为您似乎总是希望更新列表中的所有元素

那么,为什么不在循环中创建列表,填充并使用它,然后转到下一个迭代呢

e、 g:

for(int i=0;i
或者再看一段时间后,在这一点上使用代码反射似乎是显而易见的。因为你想更深入地挖掘WebElements,如果需要更进一步,你应该调用一个调用自身的方法。如果你有这个想法,你会陷入一个无休止的循环中


或者我们忽略了问题的全部要点。

为什么不使用for循环?我可以。但它会解决我的问题?我想会的。为什么不试试?我试过了。但问题有点复杂。事实上,我需要更新列表内容,因为每次迭代都会丢失引用。等等-我似乎不明白。你不想这样做吗ost引用?然后你可以创建一个新的列表。你能举一些例子吗?我用真实的列表声明更新了我的帖子。你能编辑你的帖子吗?因为我不知道为什么我必须使用
{element->
List<WebElement> elements = elements.collect { element ->
    return element.doSomething()
}
for(int i = 0;i < threshold; i++) {
    List<WebElement> elements = useMethodToRetrieveElementsFori(i);
    elements.each {
        // Do whatever has to be done with this element.
    }
}