我们有 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 中,您需要在其中查看某些元素,这使事情变得更加复杂。那么有什么想法吗?