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

QAF框架如何在locator失效时动态传入新生成的locator

QAF运行时动态传入实时定位器解决方案

QAF本身支持直接传入动态生成的定位器字符串,不需要提前在配置文件或注解中预定义,完全可以满足运行时locator动态变化的场景,具体实现方式如下:

基础动态定位器用法

你可以在代码中根据业务逻辑生成实时locator后,直接传入QAFExtendedWebElement使用:

  • 单定位器场景示例:
// 此处替换为你自己的运行时获取locator信息的逻辑,比如从页面爬取、接口返回、规则计算等
String runtimeId = fetchLatestLocatorAttr();
// 组装成QAF要求的定位器格式,前缀和预定义写法一致,支持id、css、xpath等所有QAF支持的定位策略
String dynamicLocator = String.format("id=%s", runtimeId);
// 直接使用动态定位器执行操作
QAFExtendedWebElement targetEle = new QAFExtendedWebElement(dynamicLocator);
targetEle.waitForPresent().click();
  • Page Object模式下的用法:
    不需要在页面对象中提前用@FindBy声明元素,直接在方法内动态构建定位器即可:
public class OrderPage {
    public void clickOrderItem(String dynamicOrderCode) {
        String dynamicLocator = "xpath=//div[contains(text(),'%s')]/../button".formatted(dynamicOrderCode);
        new QAFExtendedWebElement(dynamicLocator).click();
    }
}

动态多定位器 fallback 用法

如果你需要同时使用多定位器的降级策略,也可以运行时拼接多定位器格式的字符串使用:

String locator1 = "id=" + runtimeId;
String locator2 = "css=div.order-" + dynamicSuffix;
String locator3 = "xpath=//button[@data-code='%s']".formatted(dynamicCode);
// 组装成QAF多定位器数组格式
String dynamicMultiLocator = String.format("['%s','%s','%s']", locator1, locator2, locator3);
// 使用时QAF会自动按顺序尝试定位,直到找到可用的定位器
new QAFExtendedWebElement(dynamicMultiLocator).sendKeys("test content");

提示:所有动态生成的定位器只要符合QAF的定位器语法规范,和预定义定位器的能力完全一致,支持等待、断言、操作等所有QAF元素相关的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:54:03