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.
}
}