Java WebDriver PageFactory查找元素列表

Java WebDriver PageFactory查找元素列表,java,selenium-webdriver,webdriver,pageobjects,Java,Selenium Webdriver,Webdriver,Pageobjects,我在一个页面上有多个元素,我想使用PageFactory初始化它们 我试过使用下面的方法 @FindBy(xpath = "//*[contains(@class,'x-grid-tree-node-leaf')]") List<WebElement> allElements; @FindBy(xpath=“/*[包含(@class,'x-grid-tree-node-leaf')]”) 列出等位基因; 但这只返回一个元素 现在,如果我用传统的方法来寻找元素 Li

我在一个页面上有多个元素,我想使用PageFactory初始化它们

我试过使用下面的方法

@FindBy(xpath = "//*[contains(@class,'x-grid-tree-node-leaf')]")    
    List<WebElement> allElements;
@FindBy(xpath=“/*[包含(@class,'x-grid-tree-node-leaf')]”)
列出等位基因;
但这只返回一个元素

现在,如果我用传统的方法来寻找元素

List<WebElement> allElements = driver.findElements(By.xpath("//*[contains(@class,'x-grid-tree-node-leaf')]"));
List allegements=driver.findElements(By.xpath(“/*[contains(@class,'x-grid-tree-node-leaf')]);
这将返回4个元素


有什么问题吗?

您是否尝试过在Chrome开发者工具或Firebug中运行xpath

List<WebElement> allElements = driver.findElements(By.xpath("//*[contains(@class,'x-grid-tree-node-leaf')]"));
List allegements=driver.findElements(By.xpath(“/*[contains(@class,'x-grid-tree-node-leaf')]);

应该可以使用。

请使用@FindAllBy annotation,而不是使用@FindBy annotation。试试这个

@FindAllBy(xpath = "//*[contains(@class,'x-grid-tree-node-leaf')]")    
List<WebElement> allElements;
@FindAllBy(xpath=“//*[contains(@class,'x-grid-tree-node-leaf')]))
列出等位基因;

以下是FindAllBy java类的注释。

使用FindAlll注释获取系列@FindBy标记,并搜索与任何FindBy条件匹配的所有元素

@FindAll(@FindBy(how = How.XPATH, using = "//*[contains(@class,'x-grid-tree-node-leaf')]"))
List<WebElement> allElements;
@FindAll(@FindBy(how=how.XPATH,使用=“//*[contains(@class,'x-grid-tree-node-leaf')]))
列出等位基因;
@FindBy(xpath=“/*[contains(@class,'x-grid-tree-node-leaf')]))
列出等位基因;

这很有效。我的代码中有一个bug。

另请参见。请解释负plz?我假设您的答案是“负1”,因为您的答案并不是关于页面工厂的。当然,您可以直接使用WebDriver实例,但您不应该使用page factory。谢谢您的反馈。下次阅读这个问题时,我会更加小心。“how=how.XPATH”这部分在做什么?我无法理解
@FindBy(xpath = "//*[contains(@class,'x-grid-tree-node-leaf')]")    
List<WebElement> allElements;