zoukankan      html  css  js  c++  java
  • iOS自动化测试元素定位

    一、元素属性介绍

      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 个或多个的表达式。

               $  匹配字符串的末尾

        关于正则匹配更多的说明可以参考:https://www.jianshu.com/p/7fa6fe0b39af

     

  • 相关阅读:
    关于32位操作系统和64位操作系统对InstallShield打包的影响
    NEWS: Symantec宣布Wise Package Studio将终止
    InstallShield 2012新功能试用(2) 调用MsiGetProperty等MSI API发生变化
    Basic INFO 在命令行Build InstallShield安装包工程获得压缩安装包
    NEWS InstallShield 2012 Service Pack 1发布
    Basic INFO InstallShield Basic MSI工程中如何在SetupCompleteSuccess界面中启动Readme
    Basic INFO InstallShield的脚本编辑器中如何显示代码行号
    Basic INFO 关于在InstallShield制作的安装包界面中删除InstallShield文字的厂商回复
    Basic INFO InstallShield工程中如何让产品的快捷方式名称始终与产品名保持一致
    Basic INFO: 创建隐藏文件夹
  • 原文地址:https://www.cnblogs.com/zdx20/p/15206452.html
Copyright © 2011-2022 走看看