如何在QAF中统一定义iOS和Android平台专属页面元素?
在Qmetry Automation Framework(QAF)中实现跨iOS/Android的页面对象元素定位
QAF本身提供了多种方式实现跨平台的元素定位复用,完全可以达到你想要的效果,以下是两种最常用的方案:
方案一:直接在@FindBy注解中指定多平台定位器
QAF支持在定位器字符串中通过平台前缀区分不同平台的定位规则,框架会自动根据当前运行的平台匹配对应的定位器。示例代码如下:
import com.qmetry.qaf.automation.ui.webdriver.QAFWebElement; import com.qmetry.qaf.automation.ui.annotations.FindBy; public class HomePage { @FindBy(locator = "android=//android.widget.TextView[@resource-id='merchant-name']; ios=accessibility('Home')") protected QAFWebElement home; }
- 平台前缀支持
android、ios,更细分的话还可以用androidNative、iosNative、androidHybrid等 - 不同平台的定位器用分号
;分隔,QAF会自动识别当前运行环境并选择对应定位器 - 推荐使用
QAFWebElement替代原生WebElement,它集成了QAF的自动化增强能力(如等待、重试操作等)
方案二:使用定位器仓库集中管理(推荐大型项目)
将所有跨平台定位器统一放在properties文件中(比如locators.properties),再在页面对象中引用对应的key,便于统一维护:
- 定位器文件
locators.properties内容:
home.btn.loc=android=//android.widget.TextView[@resource-id='merchant-name']; ios=accessibility('Home')
- 页面对象代码:
import com.qmetry.qaf.automation.ui.webdriver.QAFWebElement; import com.qmetry.qaf.automation.ui.annotations.FindBy; public class HomePage { @FindBy(locator = "home.btn.loc") protected QAFWebElement home; }
这种方式的优势是定位器与代码解耦,修改定位规则不需要改动测试代码,更适合团队协作和大规模测试项目。
额外说明
QAF默认的定位策略就类似Appium的LocatorGroupStrategy.ALL_POSSIBLE,会自动匹配当前平台对应的定位器,无需额外配置注解。如果需要更复杂的策略,可以通过QAF的配置项调整定位器优先级。
内容的提问来源于stack exchange,提问作者Ostan Dsouza
相关产品推荐
相关产品推荐

