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

文章目录1. 元素属性介绍2. IOS的几种元素定位方法3. 元素定位方法详解3.1 IOS_PREDICATE3.2 ACCESSIBILITY_ID3.3 class_name3.4 xpath3.5 ios_uiautomation1. 元素属性介绍下图是通过weditor定位的微博的“我的钱...

文章目录

  • 1. 元素属性介绍
  • 2. IOS的几种元素定位方法
  • 3. 元素定位方法详解
    • 3.1 IOS_PREDICATE
    • 3.2 ACCESSIBILITY_ID
    • 3.3 class_name
    • 3.4 xpath
    • 3.5 ios_uiautomation

1. 元素属性介绍

下图是通过weditor定位的微博的“我的钱包”,各属性如下图:

  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文件。文件内容:

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 谓词进行定位

本文标题为:Appium针对IOS的几种元素定位方法

基础教程推荐