iOS APP自動化:class chain定位方法
阿新 • • 發佈:2021-10-08
在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來進行定位。
參考文件: