使用Selenium和java

时间:2016-10-28 13:35:07

标签: pageobjects findby

我们的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中,你需要进行资源化以查看一些元素。那么有什么想法吗?

1 个答案:

答案 0 :(得分:0)

建议:这是foreach和for之间的区别。 尝试仅使用“For loop”。