iOS自动化测试元素定位

打印 上一主题 下一主题

主题 933|帖子 933|积分 2803

媒介

本日要给各人分享的是对元素的定位,在一个页面中有很多不同的策略来定位一个元素,我们选择最合适的方法即可。
一个页面最基本构成单元是元素,想要定位一个元素,我们须要特定的信息来说明这个元素的唯一特征。
一、元素属性介绍

  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都是“我的功能”
  1. driver.find_element_by_accessibility_id("我的功能")
  2. driver.find_element(MobileBy.ACCESSIBILITY_ID,  "我的功能")
复制代码
  2、class_name

class_name定位方法利用元素的type属性,type属性表现控件类型,一般不具有唯一性,因此class_name不常用。
  例如:type属性为:XCUIElementTypeButton
  1. driver.find_element_by_class_name("XCUIElementTypeButton")
  2. driver.find_element(MobileBy.CLASS_NAME, "XCUIElementTypeButton")
复制代码
  3、Xpath

  Appium对app原生环境的xpath定位方法实行效率很低,从iOS 10开始利用的 XCUITest 框架原生不支持,定位速度很慢,官方不推荐这种方式。但是在实际利用中,当其他定位方式都不能找到元素时,可以尝试xpath定位。
 例如:第一张截图中“我的功能”定位
  1. driver.find_element_by_xpath("//XCUIElementTypeStaticText[@name='我的功能']")
  2. 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
  例如:第一张截图中“我的功能”定位
  1. driver.find_element_by_ios_class_chain('**/XCUIElementTypeStaticText[`label == "我的功能"`]')
  2. 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
   示例:
  1. driver.find_element_by_ios_predicate("label == '我的功能'")
  2. driver.find_element(MobileBy.IOS_PREDICATE, "label == '我的功能'")
  3. driver.find_element_by_ios_predicate("type == 'XCUIElementTypeButton' AND value == 'ClearEmail'")
复制代码
   1.2.2、范围运算符
   常用的范围运算符有:
范围运算符
说明
实例
IN
用于字符串的范围核对
name IN {'Alan','May'}
BETWEEN
用于数值的范围核对
name BETWEEN {3,10}
  示例:
  1. driver.find_element(MobileBy.IOS_PREDICATE, "name IN {'id_cell', 'id_alert'}")
  2. 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是等同的
   示例:
  1. 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 ‘自动化*件测*’
   示例:
  1. 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 ‘^自.+试$’
   示例:
  1. driver.find_element(MobileBy.IOS_PREDICATE, " label MATCHES ‘^自.+试$’")
复制代码
    符号说明: ^  匹配字符串的开头
   .   匹配恣意字符,除了换行符
           +  匹配 1 个或多个的表达式。
           $  匹配字符串的末尾
 
 感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望各人少走一些弯路,假如你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给各人分享一些自动化测试的学习资源,希望能给你进步的路上带来帮助。

软件测试口试文档

我们学习肯定是为了找到高薪的工作,下面这些口试题是来自阿里、腾讯、字节等一线互联网大厂最新的口试资料,并且有字节大佬给出了权威的解答,刷完这一套口试资料信赖各人都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战堆栈,这个堆栈也陪伴我走过了最艰难的旅程,希望也能帮助到你!以上均可以分享,点下方蓝色字体或小卡片即可自行领取。软件测试全套资料分享: 耗时2个月整理的软件测试最全资料包

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表