Appium Vega驱动程序中的定位器策略
“定位器策略”是在测试自动化期间用于在应用中查找和识别用户界面 (UI) 元素的方法。这些策略作为搜索模式,告诉Appium如何在屏幕上定位特定元素,例如按钮、文本字段或其他用户界面组件。
支持的策略
Appium Vega驱动程序支持UiSelector和XML路径语言 (XPath)。此版本不支持其他选择器策略。
UiSelector
一种特定于平台的定位器策略,利用原生自动化框架来识别用户界面元素。它可以根据属性和层次关系对元素选择进行精确控制。
用法示例:
选择一个选项卡查看用法示例。
element = driver.find_element("UiSelector", '{"args": {"text": "元素文本"}}')
element = driver.findElement(AppiumBy.ByAndroidUIAutomator.androidUIAutomator("{\"args\": {\"role\":\"edit\"} }")`\
XPath
一种查询语言,支持在类似XML的结构中导航和选择元素。
用法示例:
选择一个选项卡查看用法示例。
element = driver.find_element(by="xpath", value="//[contains(@description, \"Music\")]"
element = driver.findElement(AppiumBy.xpath("//[contains(@description, \"Music\")]"));
const element = await driver.$('//[contains(@description, \"Music\")]');
element = @driver.wait { |d| d.find_element :xpath, '//[contains(@description, \"Music\")]' }
关键组件
- 
    轴 - 指定搜索方向,例如后代轴、祖先轴和后续轴。 // 后代轴 "//button" // 所有按钮后代 "/button" // 直接子按钮
- 
    节点测试 - 指定要选择的节点类型,例如element、attribute或text()。 "//*" // 任何元素 "//button" // 按钮元素 "//text()" // 文本节点
- 
    谓词 - 根据各种条件(例如属性值、位置或自定义函数)筛选所选节点。 "//button[@text='Login']" // 精确匹配 "//button[contains(@text, 'Login')]" // 部分匹配
特殊用例
// 根元素
driver.findElement(By.xpath("/root"));
// 按描述划分的元素
driver.findElement(By.xpath("//*[contains(@description, 'Music')]"));
// 复杂的分层选择
driver.findElement(By.xpath("//parent/*[2]//child[@visible='true']"));
选择器策略的比较
| 功能 | UiSelector | XPath | 
|---|---|---|
| 平台支持 | 特定于平台 | 跨平台 | 
| 性能 | 通常更快 | 可能会慢一点 | 
| 可靠性 | 更可靠 | 可能会因用户界面更改而中断 | 
| 复杂性 | 中等 | 可能较复杂 | 
| 维护 | 易于进行特定于平台的测试 | 更适合跨平台测试 | 
| 调试支持 | 有原生工具可用 | 标准XML工具 | 
| 内存使用情况 | 较低 | 对于复杂的查询较高 | 
最佳实践
- 
    选择正确的策略 - 使用UiSelector进行特定于平台的测试
- 使用XPath实现跨平台兼容性
- 当性能至关重要时,首选UiSelector
 
- 
    元素位置 - 尽可能使用唯一标识符
- 避免使用绝对路径
- 让选择器尽可能保持简单
- 定期验证选择器的可靠性
 
- 
    性能注意事项 - 复杂的XPath查询可能会影响测试执行时间
- 缓存常用元素
- 如果可用,请使用应用专用ID
 
- 
    维护提示 - 文档定位器策略
- 定期查看定位器
- 在用户界面更改时进行更新
- 保持跨平台兼容性
- 在测试代码中使用有意义的名称
 
Last updated: 2025年9月30日

