You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QAF中基于多条件定位多个WebElement?

在QAF中实现类似Selenium @FindAll的元素定位需求

QAF本身提供了两种简洁的方式实现“匹配任一条件的多个元素”定位,无需类似Selenium的@FindAll注解组合:

方法一:使用@FindBy结合QAF定位器OR语法(推荐)

QAF支持在定位器表达式中用||表示“或”逻辑,直接通过单个@FindBy注解即可实现多条件匹配,示例代码:

import com.qmetry.qaf.automation.ui.webdriver.QAFWebElement;
import org.openqa.selenium.support.FindBy;
import java.util.List;

public class TargetPage {
    // 匹配class为class1或class2的所有元素
    @FindBy(locator = "css=.class1||css=.class2")
    private List<QAFWebElement> elementsWithEitherClass;
}

如果使用默认定位策略(可通过配置selenium.locator.default设置,默认是css),还可以简化为:

@FindBy(locator = ".class1||.class2")
private List<QAFWebElement> elementsWithEitherClass;

方法二:动态定位(适合临时/场景化需求)

如果需要在方法内动态执行定位,可直接调用QAFWebDriver的findElements方法,传入带OR逻辑的定位器:

import com.qmetry.qaf.automation.ui.webdriver.QAFWebDriver;
import com.qmetry.qaf.automation.ui.webdriver.QAFWebElement;
import java.util.List;

public class TargetPage {
    public List<QAFWebElement> getTargetElements() {
        QAFWebDriver driver = (QAFWebDriver) getDriver();
        return driver.findElements("css=.class1||css=.class2");
    }
}

补充说明

QAF定位器语法还支持更多逻辑组合:

  • &&表示“与”逻辑:例如css=.class1&&css=.active(匹配同时有class1和active的元素)
  • !表示“非”逻辑:例如!css=.hidden(匹配不包含hidden类的元素)
    另外,建议使用QAFWebElement替代原生WebElement,它扩展了等待、验证等实用方法,更贴合QAF框架的使用场景。

内容的提问来源于stack exchange,提问作者Ostan Dsouza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:42:44