每天努力一点点,坚持下去 ------ 博客首页

Appium定位方式总结

通过appium-desktop定位元素

 

需要主要关注的:

  1. text
  2. class
  3. content-desc
  4. 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】选择AccessibilityIdSelector选择定位属性的text即可

 

 (4)通过AndroidUIAutomator定位

点击【Search for element】-【Locator Strategy】选择AndroidUIAutomator找到选择定位属性的textSelector输入new UiSelector().text("允许")

 

 元素定位总结博文:https://blog.csdn.net/lovedingd/article/details/111058898


 

posted @   他还在坚持嘛  阅读(367)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示