Appium定位方式总结
通过appium-desktop定位元素
需要主要关注的:
- text
- class
- content-desc
- resource-id
注意:web中id是唯一的,Android中ID可能会存在不唯一的情况。如上图:resource-id可能会出现重复。(在appium-desktop在右上角提供了哪些,就是唯一的,没有提供我们就要考虑有可能不是唯一的了)
Search for element的使用
操作演示(也可在操作时点击【眼睛图标】进行录制,操作完了代码会自动生成了)
注意:录制后要使用代码运行,需要先把Appium关掉,不关掉相当于是两个服务去抢手机,会有冲突
1、ClassName
Android
Android的class属性对应ClassName定位方式,ClassName一般都是会重复的,可以通过index来获取需要的元素。(从0开始查找dom树中的同名class属性)
iOS
iOS的type属性对应CLassName定位方式,ClassName一般都是会重复的,可以通过index来获取需要的元素。(从0开始查找dom树中的同名class属性)
2、ID
Android
Android的resource-id对应ID定位方式,这个id也可能存在重复情况,可以通过index来获取需要的元素。(从0开始查找dom树中的同名resource-id属性)
使用appium-desktop来获取元素时,如果提示有id的定位方式,则可以只接获取,代表唯一。
3、XPATH
Android
Android的Xpath定位与PC的XPATH定位大同小异,可以通过相对路径的定位方式定位,区别在于,这里相对路径定位的//后只可以接Android的class属性或*。(//android.widget.Button[@text="登 录"])
iOS
iOS10 以上使用XCUITest框架后,原生框架不支持XPATH,Appium进行了转换,速度很慢不建议使用。
4、AccessibilityId
Android
Android的content-desc属性对应AccessibilityId定位方式,这个content-desc属性专门为残障人士设置,如果这个属性不为空则推荐使用。
iOS
iOS的label和name属性都对应AccessibilityId定位方式,如果有则推荐使用。
5、AndroidUIAutomator
Android的源生测试框架的定位方式,定位速度快。推荐使用牢记常用的几种。
打开方法:
常用定位方法
# 这个在运行时,调用的是Android自带的UI框架UiAutomator的Api # 介绍几个简单常用的,text、className、resource-id # text # 匹配全部text文字 driver.find_element_by_android_uiautomator('new UiSelector().text("手机号")') # 包含text文字 driver.find_element_by_android_uiautomator('new UiSelector().textContains("机")') # 以text什么开始 driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("手")') # 正则匹配text driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^手.*")') # className driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")') # classNameMatches driver.find_elements_by_android_uiautomator('new UiSelector().classNameMatches("^android.widget.*")') # resource-id、resourceIdMatches 类似我们html id 这个可能重复, driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.syqy.wecash:id/et_content")') # description driver.find_element_by_android_uiautomator('new UiSelector().description("S 日历")') # descriptionStartsWith driver.find_element_by_android_uiautomator('new UiSelector().descriptionStartsWith("日历")') # descriptionMatches driver.find_element_by_android_uiautomator('new UiSelector().descriptionMatches(".*历$")') #组合定位 self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/tab_name").text("我的")').click() #父子关系定位 self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/title_container").childSelector(text("股票"))') #兄弟关系定位 self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.xueqiu.android:id/title_container").fromParent(text("股票"))') #滚动查找 self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("查找的元素文本").instance(0));')
iOSPredicateString
仅支持iOS10以上,可以多个属性同时定位,推荐。(替代XPATH)
driver.find_elements_by_ios_predicate("label == '登录'") driver.find_elements_by_ios_predicate("type='XCUIElementTypeOther' and name='联系人,标签, 第2个按钮,共3个'")
iOSUIAutomation
iOS9.3以下使用,现在已经废弃,iOSPredicateString代替了iOSUIAutomation
代码实操练习:
(1)通过ID定位
from appium import webdriver import time caps = {} caps["platformName"] = "Android" caps["platformVersion"] = "7.1.2" caps["appActivity"] = "com.tencent.mobileqq.activity.SplashActivity" caps["appPackage"] = "com.tencent.mobileqq" caps["noReset"] = True caps["deviceName"] = "bai" driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) time.sleep(3) driver.find_element('id','btn_login').click()
运行后 模拟器页面 显示:
(2)通过Xpath定位
- 从下图我们可以看出,想要通过Xpath定位,Value值是很长的,这时候,我们可以使用自定义的方式来编写一个Xpath,Android中编写Xpath的方式是Web端一致的,如【允许】按钮,就可以写成://android.widget.Button[@text="允许"]
想要测试下我们编写的Xpath是否正确,可在【Start Recording】中调试下
(3)通过AccessibilityId定位
点击【Search for element】-【Locator Strategy】选择AccessibilityId,Selector选择定位属性的text即可
(4)通过AndroidUIAutomator定位
点击【Search for element】-【Locator Strategy】选择AndroidUIAutomator,找到选择定位属性的text,Selector输入:new UiSelector().text("允许")
元素定位总结博文:https://blog.csdn.net/lovedingd/article/details/111058898
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/16415993.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)