0

我们有 HTML 代码,其中包含可以展开或折叠的元素(取决于它们当前是什么)。它们只能扩展一层。它看起来有点像这样

<a href = "#" title = "Expand" id = ...>Row 1 </a>
<a href = "#" title = "Expand" id = ...>Row 2 </a>
<a href = "#" title = "Collapse" id = ...>Row 3 </a>
<a href = "#" id = ...>Subrow 3.1 </a>
<a href = "#" id = ...>Subrow 3.2 </a>
<a href = "#" title = "Expand" id = ...>Row 4 </a>
<a href = "#" title = "Collaps" id = ...>Row 5 </a>
<a href = "#" id = ...>Subrow 5.1 </a>
<a href = "#" id = ...>Subrow 5.2 </a>

还有更多,它比这更复杂,但你明白了。使用页面对象我做了一个列表

@FindBy(xpath = "//a[contains(@title, 'Expand') or contains(@title, 'Collapse')]")
private List<WebElement> expandCollapseElements

然后是一种扩展它们的方法,例如:

public void expand() {
   for (WebElement ele : expndCollapseElements) {
       if (ele.getAttribute("title").equals("Expand")) {
            ele.click();
       }
   }
}

在实际代码中,我还尝试等到标题更改,所以我知道它有效。无论如何,问题是一旦我扩展了一个元素,下面的所有元素显然都变得陈旧了。我知道当您使用 @FindBy 时,它每次都会重新查找元素。但我想知道元素何时刷新。似乎它只在循环开始时完成一次。真的吗?元素列表什么时候刷新?有没有更好的方法来做到这一点?我尝试制作一个包含该列表的新列表并将其反转,哪种有效但不是真的。由于这些行显示在其自己的可滚动 div 中,您需要在其中查看某些元素,这使事情变得更加复杂。那么有什么想法吗?

4

1 回答 1

0

建议:这就是foreach和for的区别。尝试仅使用“For 循环”。

于 2016-10-28T14:18:41.713 回答