1. 程式人生 > 其它 >iOS APP自動化:class chain定位方法

iOS APP自動化:class chain定位方法

iOS APP自動化:predicate定位中介紹了iOS APP的predicate定位方法,本文介紹與XPath語法比較類似的class chain定位方法。

目錄

class chain 定位

class chain 定位方法由mykola-mokhnach開發,和XPath比較類似,可以實現分層查詢,但它的查詢效能更高,通過將class chain查詢對映到一系列的XCUITest呼叫中,僅查詢子節點,不像XPath那樣遞迴地查詢整個UI樹。

class chain 支援Predicate字串匹配,下面介紹class chain 定位方法。

兒子節點搜尋

選擇兒子元素,類似於XPath語法中的反斜槓/

XCUIElementTypeWindow[`label BEGINSWITH "text"`][-1] # 選擇label以foo開頭的最後一個
XCUIElementTypeWindow/XCUIElementTypeButton[3] # 選擇window的兒子元素XCUIElementTypeButton的第3個(索引從1開始)
XCUIElementTypeWindow/*[3]  # 選擇window的第3個兒子元素
XCUIElementTypeWindow # 選擇所有子視窗
XCUIElementTypeWindow[2] # 選擇第二個視窗
XCUIElementTypeWindow[2]/XCUIElementTypeAny # 選擇第二個子視窗的所有子元素

子孫節點搜尋

類似於XPath語法中的雙反斜槓//

**/XCUIElementTypeCell[`name BEGINSWITH "A"`][-1]/XCUIElementTypeButton[10] # 選擇name以A開頭的最後一個Cell元素的第10個子元素
**/XCUIElementTypeCell[`name BEGINSWITH "B"`] # 選擇name以B開頭的所有Cell元素
**/XCUIElementTypeCell[`name BEGINSWITH "C"`]/XCUIElementTypeButton[10] # 選擇name以C開頭的第一個Cell元素的第10個子元素
**/XCUIElementTypeCell[`name BEGINSWITH "D"`]/**/XCUIElementTypeButton # 選擇name以D開頭的第一個Cell元素下所有後代Button

使用class chain定位是需要注意以下幾點:

  • Predicate字串要寫到中括號中,並且使用反引號包裹。
  • Predicate表示式應該寫在索引前面

class chain定位示例

使用facebook-wda進行元素點選操作:

s = c.session('com.apple.Preferences') # 開啟設定

s(classChain='XCUIElementTypeWindow/**/XCUIElementTypeCell[`label BEGINSWITH "螢幕"`]').click() # 點選【螢幕使用時間】
s(classChain='**/XCUIElementTypeCell[`label BEGINSWITH "螢幕"`]').click()
s(classChain='**/XCUIElementTypeTable/*[`name == "通知"`]').click() # 點選【通知】
s(classChain='**/XCUIElementTypeCell[7]').click() # 點選【通知】

上面的定位語句也可以使用XPath語法,對應如下:

s(xpath='//XCUIElementTypeWindow//XCUIElementTypeCell[starts-with(@label,"螢幕")]').click()
s(xpath='//XCUIElementTypeCell[starts-with(@label,"螢幕")]').click()
s(xpath='//XCUIElementTypeTable/*[@name="通知"]').click()
s(xpath='//XCUIElementTypeCell[7]').click()

XPath定位效率比class chain低,建議使用class chain來進行定位。

參考文件:

  1. https://github.com/facebookarchive/WebDriverAgent/wiki/Class-Chain-Queries-Construction-Rules

  2. https://github.com/appium/appium-xcuitest-driver/pull/391

--THE END--