【Appium总结】元素定位
1、ID
Android
Android的resource-id对应ID定位方式,可以通过index来获取需要的元素(从0开始查找dom树中的同名resource-id属性)。使用appium-desktop来获取元素时,id和resource-id是相同的,如果只有resource-id,可能存在重复现象,如果提示有id的定位方式,则可以只接获取,代表唯一。
driver.find_element_by_id('com.tencent.mobileqq:id/btn_login')
2、AccessibilityId
Android
Android的content-desc属性对应AccessibilityId定位方式,这个content-desc属性专门为残障人士设置,如果这个属性不为空则推荐使用。
driver.find_element_by_accessibility_id('请输入QQ号码或手机或邮箱')
iOS
iOS的label和name属性都对应AccessibilityId定位方式,如果有则推荐使用。
3、Xpath
Android
Android的Xpath定位与PC的Xpath定位大同小异,可以通过相对路径的定位方式定位。区别在于,这里相对路径定位的//后只可以接Android的class属性或*。
driver.find_element_by_xpath('//android.widget.EditText[@text="QQ号/手机号/邮箱"]')
iOS
iOS10 以上使用XCUITest框架后,原生框架不支持XPATH,Appium进行了转换,速度很慢不建议使用。
4、UIAutomator
Android的源生测试框架的定位方式,定位速度快。推荐使用常用的几种。
1 # 这个在运行时,调用的是Android自带的UI框架UiAutomator的Api 2 # 介绍几个简单常用的,text、className、resource-id 3 # text 4 # 匹配全部text文字 5 driver.find_element_by_android_uiautomator('new UiSelector().text("手机号")') 6 # 包含text文字 7 driver.find_element_by_android_uiautomator('new UiSelector().textContains("机")') 8 # 以text什么开始 9 driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("手")') 10 # 正则匹配text 11 driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^手.*")') 12 13 # className 14 driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")') 15 # classNameMatches 16 driver.find_elements_by_android_uiautomator('new UiSelector().classNameMatches("^android.widget.*")') 17 18 # resource-id、resourceIdMatches 19 driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.syqy.wecash:id/et_content")') 20 21 # description 22 driver.find_element_by_android_uiautomator('new UiSelector().description("S 日历")') 23 # descriptionStartsWith 24 driver.find_element_by_android_uiautomator('new UiSelector().descriptionStartsWith("日历")') 25 # descriptionMatches 26 driver.find_element_by_android_uiautomator('new UiSelector().descriptionMatches(".*历$")')
5、iOSPredicateString
仅支持iOS10以上,可以多个属性同时定位,推荐。(替代XPATH)
driver.find_elements_by_ios_predicate("label == '登录'") driver.find_elements_by_ios_predicate("type='XCUIElementTypeOther' and name='联系人,标签, 第2个按钮,共3个'")
6、iOSUIAutomation
iOS9.3以下使用,现在已经废弃,iOSPredicateString代替了iOSUIAutomation
作者:gtea
博客地址:https://www.cnblogs.com/gtea
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!