天天看點

iOS自動化測試元素定位

一、元素屬性介紹

  iOS自動化元素查找工具,我使用的是Appium的inspector。最新版的appium自動展示多種元素定位表達式,還可以檢視每種定位表達式的執行效率。

iOS自動化測試元素定位

type

元素類型,與className作用一緻,如:XCUIElementTypeButton

value

一般不用

name

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

label

絕大多數情況下,與 name 作用一緻

enabled

元素是否可點選,一般值為true或者false

visible

元素是否可見,一般值為true或者false

  Appium的inspector功能中,選擇某個元素後在“selected Element”中會展示多個定位表達式,而且點選定位表達式後面的“Get Timing”,可以顯示每個定位表達式的執行時間。

iOS自動化測試元素定位
iOS自動化測試元素定位

二、iOS常用定位方法

  iOS自動化測試元素定位的accessibility_id主要使用元素的label或name(兩個屬性的值都一樣)屬性進行定位。

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

  class_name定位方法使用元素的type屬性,type屬性表示控件類型,一般不具有唯一性,是以class_name不常用。

  例如:type屬性為:XCUIElementTypeButton

  Appium對app原生環境的xpath定位方法執行效率很低,從iOS 10開始使用的 XCUITest 架構原生不支援,定位速度很慢,官方不推薦這種方式。但是在實際使用中,當其他定位方式都不能找到元素時,可以嘗試xpath定位。

  例如:第一張截圖中“我的功能”定位

  ios_class_chain僅支援iOS 10或以上,且僅限于WebDriverAgent 架構中使用。此方法用于替代xpath,但該方法還有待完善,沒有納入官方文檔。

  Github說明位址:https://github.com/appium/appium-xcuitest-driver

  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.2.2、範圍運算符

   常用的範圍運算符有:

範圍運算符

說明

執行個體

IN

用于字元串的範圍核對

name IN {'Alan','May'}

BETWEEN

用于數值的範圍核對

<code>name BETWEEN {3,10}</code>

   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.2.4、模糊比對:LIKE

   模糊比對也可以稱為通配符比對,?代表一個字元,*代表多個字元。

   示例:現有元素的label屬性:“自動化軟體測試”

   label LIKE ‘自動化軟體測試’   # 完全比對

   label LIKE ‘自動化?件測試’    # ? 比對一個字元

   label LIKE ‘自動化??測試’    # 兩個?号比對兩個字元

   label LIKE ‘自?化?件測試’

   label LIKE ‘*軟體測試’      # *代表多個字元

   label LIKE ‘自動化軟體*’

   label LIKE ‘自動化*件測*’

   1.2.5、邏輯運算符

邏輯運算符

AND

邏輯與:必須同時滿足所有條件

type == XCUIElementTypeStaticText AND label CONTAINS '測試

&amp;&amp;

type == XCUIElementTypeStaticText &amp;&amp; label CONTAINS '測試

OR

邏輯或:隻需要滿足一個條件即可

enabled == true OR visible == false

||

enabled == true || visible == false

NOT

邏輯非:取反

!

   1.2.6、正規表達式:MATCHES

   以字元串的比對為例:比對字元串“自動化軟體測試”,以“自”開頭,然後以“試”結尾。

   表達式:label MATCHES ‘^自.+試$’

    符号說明: ^  比對字元串的開頭

           .   比對任意字元,除了換行符

           +  比對 1 個或多個的表達式。

           $  比對字元串的末尾

    關于正則比對更多的說明可以參考:https://www.jianshu.com/p/7fa6fe0b39af