Appium针对IOS的几种元素定位方法

文章目录

1. 元素属性介绍

下图是通过weditor定位的微博的“我的钱包”,各属性如下图:
Appium针对IOS的几种元素定位方法

  1. className:元素类型,如:XCUIElementTypeButton
  2. isEnabled:元素是否可点击,一般值为1或者0
  3. isVisible:元素是否可见,一般值为1或者0
  4. value: 一般不用
  5. label:绝大多数情况下,与 name 作用一致
  6. name:元素的文本内容,可用作 AccessibilityId定位方式
  7. xpath: 元素的绝对路径,可用作Xpath定位方式

2. IOS的几种元素定位方法

  • ios_predicate(推荐优先使用,详细介绍见3.1)
  • accessibility_id(推荐使用,对应name属性)
  • class_name (不推荐使用,对应className属性)
  • xpath(推荐使用)
  • ios_uiautomation(目前没用过)
  • ios_class_chain(目前没用过,不介绍)
    具体参考appium.webdriver.common.mobileby文件。文件内容:
    Appium针对IOS的几种元素定位方法

3. 元素定位方法详解

3.1 IOS_PREDICATE

推荐优先使用。仅支持 iOS 10或以上,可支持元素的单个属性和多个属性定位。具体 iOSNsPredicate语法结构可查看官方文档。
使用方法:

# 一个属性定位‘我的钱包’
driver.find_element_by_ios_predicate("label == '我的钱包')
# 两个属性定位‘我的钱包’
driver.find_element_by_ios_predicate("label == '我的钱包' AND name == 'WBPageDiscoverSubGirdView')  

上面两个例子用的都是完全匹配(==),还可以用不完全匹配(如:CONTAINS、LIKE)的语法结构,具体可参考https://testerhome.com/topics/9405

3.2 ACCESSIBILITY_ID

推荐使用。替代以前的name定位方式。
在 Android 上,主要使用元素的content-desc属性,如该属性为空,不能使用此定位方式。
在 iOS 上,主要使用元素的label或name(两个属性的值都一样)属性进行定位,如该属性为空,也是不能使用该属性。
使用方法:

# 等同于by_name
driver.find_element_by_accessibility_id('WBPageDiscoverSubGirdView')

3.3 class_name

不推荐使用。支持:Android 和 iOS。需要特别注意该属性的唯一性!
class_name唯一的情况并不多,一般情况下用不上。

# 不推荐使用
driver.find_element_by_class_name('XCUIElementTypeButton')

3.4 xpath

推荐使用。支持:Android 和 iOS。但由于 iOS 10开始使用的 XCUITest 框架原生不支持,定位速度很慢。

  • 使用绝对路径定位
MobileBy.xpath("className/className/className/className")
  • 使用相对路径定位
MobileBy.xpath("//className")
  • 通过元素的索引定位
MobileBy.xpath("//className[index]")
  • 通过元素的属性定位
一种属性:MobileBy.xpath("//className[@label='更多信息']") 
两种属性:MobileBy.xpath("//className[@label='更多信息'][@isVisible='1']")
部分属性(最强大):MobileBy.xpath("//className[contains(@label,'更多')]")

3.5 ios_uiautomation

仅支持 iOS 9.3或以下,是 iOS 旧框架 UIAutomation 的定位方式,现在基本上很少使用,这个定位类型同样可使用 iOS 谓词进行定位

上一篇:HTML或者JSP页面--执行完某事件后刷新页面,重置表单,清空数据


下一篇:Autojs4.1.0实战教程---快逗短视频自动提现