IOS自动化测试元素定位

news2024/11/18 5:47:29

一、元素属性介绍
  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、范围运算符

   常用的范围运算符有:


   示例:
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、字符串相关


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

包含某个字符串: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、逻辑运算符


   1.2.6、正则表达式:MATCHES

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

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

   示例:
driver.find_element(MobileBy.IOS_PREDICATE, " label MATCHES ‘^自.+试$’")
    
    符号说明: ^  匹配字符串的开头
           .   匹配任意字符,除了换行符
           +  匹配 1 个或多个的表达式。
           $  匹配字符串的末尾
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1386303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线性表 | 双向链表

双向链表 双向循环链表

定制聚四氟乙烯反应容器可配套温度计套管和冷凝管

是谁遇到氟化氢就头疼&#xff0c;是谁看着玻璃装置被强碱性试剂折腾的惨不忍睹。 特氟龙塑料材质可以帮您解决问题&#xff0c;聚四氟乙烯材质是其中的一种材质&#xff0c;耐温250℃&#xff0c;耐受强酸强碱和各种有机溶剂&#xff0c;加工灵活&#xff0c;来样或者图纸或者…

使用WAF防御网络上的隐蔽威胁之SSRF攻击

服务器端请求伪造&#xff08;SSRF&#xff09;攻击是一种常见的网络安全威胁&#xff0c;它允许攻击者诱使服务器执行恶意请求。与跨站请求伪造&#xff08;CSRF&#xff09;相比&#xff0c;SSRF攻击针对的是服务器而不是用户。了解SSRF攻击的工作原理、如何防御它&#xff0…

数据结构之str类

str类 str 是字符串类。str 大概是 Python 中除了int 之外最基本、最常用的数据类型&#xff0c;在Java与其他语言里基本叫做String&#xff0c;其用途广泛&#xff0c;随处可见&#xff0c;但是要记住一点&#xff0c;字符串是不允许修改的。不过&#xff0c;我们仍然可以对其…

org.springframework.web.servlet.HandlerInterceptor

过期 1 配置黑名单 2 启动注册拦截 3 浏览器访问拦截

Linux CentOS 7.6安装nginx详细保姆级教程

一、通过wget下载nginx压缩包 1、进入home文件并创建nginx文件夹用来存放nginx压缩包 cd /home //进入home文件夹 mkdir nginx //创建nginx文件夹 cd nginx //进入nginx文件夹2、下载nginx,我这里下载的是Nginx 1.24.0版本&#xff0c;如果要下载新版本可以去官网进行下载:…

【Dart】=> [06] Dart初体验-类Class-构造函数-继承-mixin-异步编程-链式调用-泛型-异常

目录 能够定义并使用Dart的类类的定义构造函数私有属性和方法继承mixin异步编程FutureFuture链式调用async - awaitdynamic类型泛型异常 能够定义并使用Dart的类 Dart是一门面向对象的编程语言&#xff0c;所有的对象都是类的实例 通过类我们可以对数据和方法进行封装复用 学习…

JVM基础(8)——CMS垃圾回收器

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

企业销售人员都在用的客户管理CRM软件有哪些?

“目前我公司需要用到软件的人数不超过10个&#xff0c;主要销售模式是电话、拜访为主&#xff0c;产品是称重设备&#xff0c;客户是工厂。” 上面的需求整理了一下&#xff1a; 团队规模&#xff1a;小规模&#xff0c;不超过10人——尽可能降低使用成本使用人员&#xff1a;…

C++结合OpenCV:图像的加法运算

一、图像运算 针对图像的加法运算、位运算都是比较基础的运算。但是&#xff0c;很多复杂的图像处理功能正是借助这些基础的运算来完成的。所以&#xff0c;牢固掌握基础操作&#xff0c;对于更好地实现图像处理是非常有帮助的。本章简单介绍了加法运算、位运算&#xff0c;并…

CG Magic分享3dmax渲染太亮问题如何解决?

3D Max软件渲染时&#xff0c;渲染问题较多也是正常的&#xff0c;对于行业小白来说&#xff0c;渲染问题多也是能理解的&#xff0c;因为&#xff0c;小编经常在问答中&#xff0c;看到一些网友提问&#xff0c;3dmax渲染太亮怎么办&#xff1f; 3dmax渲染太亮了怎么回事&…

如何定位和优化程序CPU、内存等性能之巅

摘要 性能优化指在不影响系统运行正确性的前提下&#xff0c;使之运行得更快&#xff0c;完成特定功能所需的时间更短&#xff0c;或拥有更强大的服务能力。本文将介绍性能优化的基本概念以及如何定位和优化程序中的CPU、内存和IO瓶颈。 引言 随着计算机系统的日益复杂和应用…

有哪些windows录屏软件?

有哪些windows录屏软件&#xff1f;随着技术的发展&#xff0c;使用Windows录屏软件已成为一种非常方便的方式&#xff0c;可以帮助人们记录和分享他们在计算机上的操作过程。例如&#xff0c;您可以使用录屏软件记录您在编辑文档或演示新产品时的屏幕操作&#xff0c;并将其用…

BIOS知识枝桠——RAID 磁盘阵列

文章目录 前言一、RAID介绍二、RAID等级分类1.RAID02.RAID13.RAID24.RAID3和RAID45.RAID5和RAID66.RAID77.RAID10 BIOS下组建RAID 前言 假设存在多块磁盘&#xff0c;如果不组建阵列&#xff0c;磁盘与磁盘之间是没有任何关系的。磁盘A和B&#xff0c;放在A中的文件与B磁盘没有…

自学Python笔记总结(更新中……)

自学Python笔记总结 网址数据类型类型查看类型&#xff0c;使用type内置类标识符 输出输入语句format函数的语法及用法数据类型的转换运算符算数运算符赋值运算符的特殊场景拆包 比较运算符逻辑运算符 与 短路位运算符运算符优先级 程序流程控制分支语句pass 占位 循环语句 whi…

可应用于电脑主板等产品上的精密基准电路WL431 输出电压可设定 响应速度快

WL431为三端可调节精密基准源。通过两个外接电阻&#xff0c;输出电压可在Vref约2.5 V )到36V连续调节。该电路输出阻抗小(0.2Q)。 开启特性好&#xff0c;在许多应用场合&#xff0c;它能较好地替换齐纳极管。 主要特点&#xff1a;● 温度系数 50pmC ● 在…

荣耀开发者大会2023 · 一张图读懂智慧人机交互分论坛

荣耀智慧人机交互&#xff0c;以用户意图理解为主的智慧交互&#xff0c;平台级AI使能主动理解用户意图&#xff0c;服务找人能力全面升级&#xff01; 荣耀智慧门能精准理解用户交互意图&#xff0c;覆盖100头部应用&#xff0c;支持文本、图片等元素类型随心拖拽&#xff0c…

自媒体必备的8个素材网站,免费可商用。

自媒体必备的8个素材网站&#xff0c;视频、音效、音频、图片等素材非常齐全&#xff0c;免费下载&#xff0c;无需担心侵权&#xff0c;赶紧收藏起来吧~ 视频素材 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库可以找到设计、办公、图片、视频、音频…

基于树莓派5(Raspberry Pi 5)的高性能工业平板电脑升级版!

​ 上海晶珩继推出首个搭载 Raspberry Pi 5 的平板电脑ED-HMI3010系列后&#xff0c;又推出了具备高性能和多功能特性的 Raspberry Pi 5 的平板电脑ED-HMI3020系列。ED-HMI3020支持选择7英寸和10.1英寸两种尺寸的触摸屏&#xff0c;可选配 M.2 NVMe SSD 存储扩展&#xff0c;提…