iOS自动化测试元素定位

目录

前言

一、元素属性介绍

  1、元素属性

  2、查看各定位方式执行效率

二、iOS常用定位方法

  1、accessibility_id

  2、class_name

  3、Xpath

  4、ios_class_chain(类型链)

  5、ios_predicate(谓词)

结语


前言

今天要给大家分享的是对元素的定位,在一个页面中有很多不同的策略来定位一个元素,我们选择最合适的方法即可。

一个页面最基本组成单元是元素,想要定位一个元素,我们需要特定的信息来说明这个元素的唯一特征。

一、元素属性介绍

  iOS自动化元素查找工具,我使用的是Appium的inspector。最新版的appium自动展示多种元素定位表达式,还可以查看每种定位表达式的执行效率。

  1、元素属性

type

元素类型,与className作用一致,如:XCUIElementTypeButton

value

一般不用

name

元素的文本内容,可用作 AccessibilityId定位方式,如:ClearEmail

label

绝大多数情况下,与 name 作用一致

enabled

元素是否可点击,一般值为true或者false

visible

元素是否可见,一般值为true或者false

  2、查看各定位方式执行效率

  Appium的inspector功能中,选择某个元素后在“selected Element”中会展示多个定位表达式,而且点击定位表达式后面的“Get Timing”,可以显示每个定位表达式的执行时间。

二、iOS常用定位方法

  1、accessibility_id

  iOS自动化测试元素定位的accessibility_id主要使用元素的label或name(两个属性的值都一样)属性进行定位。

  例如:第一张截图中label或name都是“我的功能”

driver.find_element_by_accessibility_id("我的功能")
driver.find_element(MobileBy.ACCESSIBILITY_ID,  "我的功能")

  2、class_name

  class_name定位方法使用元素的type属性,type属性表示控件类型,一般不具有唯一性,因此class_name不常用。

  例如:type属性为:XCUIElementTypeButton

driver.find_element_by_class_name("XCUIElementTypeButton")
driver.find_element(MobileBy.CLASS_NAME, "XCUIElementTypeButton")

  3、Xpath

  Appium对app原生环境的xpath定位方法执行效率很低,从iOS 10开始使用的 XCUITest 框架原生不支持,定位速度很慢,官方不推荐这种方式。但是在实际使用中,当其他定位方式都不能找到元素时,可以尝试xpath定位。

  例如:第一张截图中“我的功能”定位

driver.find_element_by_xpath("//XCUIElementTypeStaticText[@name='我的功能']")
driver.find_element(MobileBy.XPATH, "//XCUIElementTypeStaticText[@name='我的功能']")

  4、ios_class_chain(类型链)

  ios_class_chain仅支持iOS 10或以上,且仅限于WebDriverAgent 框架中使用。此方法用于替代xpath,但该方法还有待完善,没有纳入官方文档。

  Github说明地址:https://github.com/appium/appium-xcuitest-driver

  例如:第一张截图中“我的功能”定位

driver.find_element_by_ios_class_chain('**/XCUIElementTypeStaticText[`label == "我的功能"`]')
driver.find_element(MobileBy.IOS_CLASS_CHAIN, '**/XCUIElementTypeStaticText[`label == "我的功能"`]')

  5、ios_predicate(谓词)

  iOS Predicate 即谓词逻辑。ios_predicate定位方法支持iOS所有的版本,也就是能适配XCUITest 和 UIAutomation底层测试框架,使用的就是iOS编程语言,因此可以把此方法作为首选定位方式。

  谓词表达式由属性、运算符和值构成。

   1.1、常用的属性

   在上面的表格中已经介绍,可以使用的元素属性:type、value、name、label、enabled、visible

   1.2、运算符

   1.2.1、比较运算符

比较运算符

>, <, ==, >=, <=, !=

   可用于数值和字符串的比较,如:label == ‘我的功能’,label >= 500

   示例:

driver.find_element_by_ios_predicate("label == '我的功能'")
driver.find_element(MobileBy.IOS_PREDICATE, "label == '我的功能'")
driver.find_element_by_ios_predicate("type == 'XCUIElementTypeButton' AND value == 'ClearEmail'")

   1.2.2、范围运算符

   常用的范围运算符有:

范围运算符

说明

实例

IN

用于字符串的范围核对

name IN {'Alan','May'}

BETWEEN

用于数值的范围核对

name BETWEEN {3,10}

   示例:

driver.find_element(MobileBy.IOS_PREDICATE, "name IN {'id_cell', 'id_alert'}")
driver.find_element_by_ios_predicate("value BETWEEN {5, 7}")

   1.2.3、字符串相关

字符串相关

运算符

说明

CONTAINS

表示包含某个字符串

BEGINSWITH

表示以某个字符串开头

ENDSWITH

表示以某个字符串结束

   以字符串“自动化软件测试”为例:

  • 包含某个字符串:label CONTAINS ‘软件’
  • 以某个字符串开头:label BEGINSWITH ‘自动’
  • 以某个字符串结束:label ENDSWITH ‘测试’

   扩展:在三个关键字后加上[c]、或者[d]、[cd]

  • [c]:表示不区分大小写,可用于字母的校验;

  • [d]:不区分发音符号,即没有重音符号($、#等);

  • [cd]:既不区分大小写,也不区分发音符号;

   例如:name CONTAINS[c] ABcd 和  name CONTAINS abcd是等同的

   示例:

driver.find_element_by_ios_predicate("label CONTAINS ‘软件’")

   1.2.4、模糊匹配:LIKE

   模糊匹配也可以称为通配符匹配,?代表一个字符,*代表多个字符。

   示例:现有元素的label属性:“自动化软件测试”

   label LIKE ‘自动化软件测试’   # 完全匹配

   label LIKE ‘自动化?件测试’    # ? 匹配一个字符

   label LIKE ‘自动化??测试’    # 两个?号匹配两个字符

   label LIKE ‘自?化?件测试’

   label LIKE ‘*软件测试’      # *代表多个字符

   label LIKE ‘自动化软件*’

   label LIKE ‘自动化*件测*’

   示例:

driver.find_element(MobileBy.IOS_PREDICATE, "label LIKE ‘*软件测试")

   1.2.5、逻辑运算符

逻辑运算符

说明

实例

AND

逻辑与:必须同时满足所有条件

type == XCUIElementTypeStaticText AND label CONTAINS '测试

&&

type == XCUIElementTypeStaticText && label CONTAINS '测试

OR

逻辑或:只需要满足一个条件即可

enabled == true OR visible == false

||

enabled == true || visible == false

NOT

逻辑非:取反

!

   1.2.6、正则表达式:MATCHES

   以字符串的匹配为例:匹配字符串“自动化软件测试”,以“自”开头,然后以“试”结尾。

   表达式:label MATCHES ‘^自.+试$’

   示例:

driver.find_element(MobileBy.IOS_PREDICATE, " label MATCHES ‘^自.+试$’")

    符号说明: ^  匹配字符串的开头

           .   匹配任意字符,除了换行符

           +  匹配 1 个或多个的表达式。

           $  匹配字符串的末尾

结语

1、进入任何行业都需要不断地学习和努力,软件测试工作也不例外,后期的你如果能学习计算机、数据库、开发等知识,将对你的个人提升有极大帮助。

2、时刻保持对行业的热情,既然想在这个行业混,那就就得多去了解行业的新动态,更新自己的技术。你得知道想要站得更高,就需要学习更高水平的技术。

希望有勇气改变的你,能发展得更好,持续学习必不可少,不要让自己很容易被替代!!!

努力的人有的是机会,但不努力的人是一定没机会的!!!

软件测试资料需要的可以私信我关键词(资料)免费获取

欢迎留言,或是关注我的专栏和我交流。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值