【问题标题】:WebDriver PageFactory Find Elements ListWebDriver PageFactory 查找元素列表
【发布时间】:2015-01-30 19:59:05
【问题描述】:

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

我尝试过使用以下

@FindBy(xpath = "//*[contains(@class,'x-grid-tree-node-leaf')]")    
    List<WebElement> allElements;

但这只会返回一个元素。

现在,如果我使用传统方式来查找元素

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

这会返回 4 个元素

任何指示可能是什么问题?

【问题讨论】:

标签: java selenium-webdriver webdriver pageobjects


【解决方案1】:
@FindBy(xpath = "//*[contains(@class,'x-grid-tree-node-leaf')]")    
List<WebElement> allElements;

这行得通。我的代码有错误。

【讨论】:

    【解决方案2】:

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

    @FindAll(@FindBy(how = How.XPATH, using = "//*[contains(@class,'x-grid-tree-node-leaf')]"))
    List<WebElement> allElements;
    

    【讨论】:

    • "how = How.XPATH" 这部分在做什么?我无法理解
    【解决方案3】:

    不要使用@FindBy 注释,而是使用@FindAllBy 注释。试试这个!

    @FindAllBy(xpath = "//*[contains(@class,'x-grid-tree-node-leaf')]")    
    List<WebElement> allElements;
    

    这是 FindAllBy java 类的link

    【讨论】:

      【解决方案4】:

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

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

      应该可以。

      【讨论】:

      • 请解释一下否定的?
      • 我假设您得到了“减一”,因为您的回答与页面工厂无关。当然你可以直接使用 WebDriver 的实例,但你不应该用页面工厂来做。
      • 感谢您的反馈。下次看题的时候会更加小心。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2011-12-21
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多