一、元素屬性介紹
iOS自動化元素查找工具,我使用的是Appium的inspector。最新版的appium自動展示多種元素定位表達式,還可以檢視每種定位表達式的執行效率。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOkFzYwATMmdTY3U2Y1M2YlVjNklDO3M2MwIWNjRjZ28CXzAzLclDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
type
元素類型,與className作用一緻,如:XCUIElementTypeButton
value
一般不用
name
元素的文本内容,可用作 AccessibilityId定位方式,如:ClearEmail
label
絕大多數情況下,與 name 作用一緻
enabled
元素是否可點選,一般值為true或者false
visible
元素是否可見,一般值為true或者false
Appium的inspector功能中,選擇某個元素後在“selected Element”中會展示多個定位表達式,而且點選定位表達式後面的“Get Timing”,可以顯示每個定位表達式的執行時間。
二、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 '測試
&&
type == XCUIElementTypeStaticText && 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