如何在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
相关产品推荐
相关产品推荐

