Selenium Webdriver-在pagefactory中实施链接的webdriver findelement

时间:2018-08-07 07:31:16

标签: java selenium selenium-webdriver page-factory

我有一个Webelements列表,从中选择了一个随机元素。 现在有一个随机的Web元素,我需要在其中找到所有子元素。我如何在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']"));

正如我在整个项目中使用页面工厂注释一样,有没有办法实现相同的目的。

2 个答案:

答案 0 :(得分:0)

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

public List<WebElement> getTitles(WebElement randomElement) {
    return randomElement.findElements(by.id("title"));
}

答案 1 :(得分:0)

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

今年年初,我在blog post中讨论了如何使用“块”类解决此问题。这不是一件容易的事,但是有一个github project包含了我想要挖掘以使用自己的代码。

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

请注意,所有这些都需要大量的开销,因此,如果您仅尝试获取标题,则将流API与链式findElements()调用结合使用会更好。