0

我有一个 Webelements 列表,其中选择了一个随机元素。现在有一个随机的 webelement,我需要找到其中的所有子元素。我如何在 pagefactory 中实现这一点。

在硒中,这是有效的:

List<WebElement> listOfElements = driver.findElements(By.xpath("//locator"));

WebElement randomElement = // Code to get a random element out of this list.

String title = randomElement.findElement(By.xpath(".//[@id='title']"));

在页面工厂中,我尝试过:

@FindBy(xpath="//locator")

List<WebElement> listOfElements;

@FindBy(id="title");

WebElement title;


WebElement randomElement = // Code to get a random element out of this list.

坚持如何使用页面工厂注释在随机元素中获取标题。

我知道这会起作用:

String title = randomElement.findElement(By.xpath(".//[@id='title']"));

当我在整个项目中使用页面工厂注释时,有没有办法实现同样的效果。

4

2 回答 2

0

您在页面对象中创建一个公共方法,该方法返回 Web 元素列表。

public List<WebElement> getTitles(WebElement randomElement) {
    return randomElement.findElements(by.id("title"));
}
于 2018-08-07T14:11:15.917 回答
0

对你来说可能为时已晚,但万一它对其他人有帮助:可以做到这一点,但并不简单,需要定制一些 WebDriver 的内部类。

我在今年早些时候的一篇博文中讨论了如何使用“块”类来解决这个问题。这不是一件小事,但是有一个github 项目包含我使用的代码,如果你想深入使用自己的话。

本质上,我使用每个定位的 WebElement 来生成一个称为块的新“PageObject”类。只要每个随机元素都相同,就可以使用 PageFactory 表示法来查找子 WebElement。

请注意,所有这些都有很大的开销,所以如果您只是想获得标题,那么最好使用带有链式 findElements() 调用的流 API。

于 2018-09-17T22:01:54.930 回答