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

