App定位方式
- Accessibility id: 识别一个唯一的 UI 元素,对于 XCUITest 引擎,它对应的的属性名是 accessibility-id,对于 Android 系统的页面元素,对应的属性名是 content-desc
- Class name: 对于 iOS 系统,它的 class 属性对应的属性值会以XCUIElementType开头,对于 Android 系统,它对应的是 UIAutomator2 的 class 属性(e.g.: android.widget.TextView)
- ID: 原生元素的标识符,Android 系统对应的属性名为resource-id,iOS 为name
- Name: 元素的名称
- Xpath: 使用 xpath 表达式查找页面所对应的 xml 的路径(不推荐,存在性能问题)
App 定位方式进阶
- Image: 通过匹配 base 64 编码的图像文件定位元素
- Android Uiautomator(Uiautomator2 Only): 使用Uiautomator 提供的API, 尤其是UiSelector 类来定位元素, 在Appium中 会发生java代码作为字符串发送到服务器,服务器在应用程序的环境中执行这段代码,并返回一个或多个元素
- Android View Tag(Espressor only): 使用 view tag定位元素
- Android Data Macther(Espressor only): 使用Espressor数据匹配器定位元素
- IOS UIAutomation: 在IOS 应用程序自动化时,可以使用苹果的 instruments 框架查找元素
Web定位方式
- class name: 通过 class 属性定位元素
- css selector: 通过匹配css selector 定位元素
- id: 通过 id 属性匹配元素
- name: 通过 name 属性定位元素
- link text: 通过 text 标签中间的text文本定位元素
- partial link text: 通过 text 标签中间的text文本的部分内容定位元素
- tag name: 通过 tag 名称定位元素
- xpath: 通过 xpath 表达式匹配元素
选择定位器通用原则
- 与研发约定的属性优先
- web 推荐 class
- android 推荐 content-description
- ios 推荐 label
- 身份属性 id,name(web 定位)
- 组合定位 xpath,css
- 其它定位
Web 弹框定位
web 需要使用 driver.switchTo().alert() 处理
App toast 提示框定位
- 使用 driver.page_source 拿到页面布局结构文件,分析 toast/弹框组件的标签内容,
- 然后通过 id/text/class 等属性,使用 xpath 完成元素定位
- 结合 隐式等待
下拉框/日期控件定位
- 场景:
- 标签组合的下拉框无法定位
- 标签组合的日期控件无法定位
- 解决:
- 面对这些元素,我们可以引入 JS 注入技术来解决问题。
文件上传定位
- 场景:
- input 标签文件上传
- 解决:
- input 标签直接使用 send_keys()方法