我有一个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']"));
正如我在整个项目中使用页面工厂注释一样,有没有办法实现相同的目的。
答案 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()调用结合使用会更好。