IOS 自動化,幾種特殊情況下 UI 元素獲取的方式

meedy2016發表於2024-11-20

最近做 IOS 自動化,總結幾種 UI 元素查詢方式(同時做個記錄),參考各種資料,按查詢元素的順序速度,從快到慢的順序如下:ios_predicate >> accessibility_id >> class_name >>xpath,因此首選 ios_predicate 。
1、核取方塊如何判斷是否勾選
IOS,核取方塊勾選和未勾選狀態下,核取方塊的 value 值是不同的,核取方塊勾選時 value == '1',未勾選時 value 值不存在,因此可以增加判斷條件,來判斷是否勾選,例如登入頁 - 記住密碼核取方塊,可以用如下語句進行判斷:
if self.is_element_present(MobileBy.IOS_PREDICATE, "type == 'XCUIElementTypeButton' AND value == '1' AND label == '記住密碼'") == 'False':
判斷條件不成立時,即為:未勾選記住密碼
if self.is_element_present(MobileBy.IOS_PREDICATE, "type == 'XCUIElementTypeButton' AND value == '1' AND label == '記住密碼'") == 'True':
判斷條件成立時,即為:已勾選記住密碼
2、元素文字內容較長時,可用 CONTAINS 條件判斷,例如:彈框中提示語比較長時,且包含不確定文字內容時,可以提取確定文字內容進行判斷,示例如下:
if self.is_element_present(MobileBy.XPATH,
'//[@label="溫馨提示"]') == "True" and self.is_element_present(
MobileBy.XPATH,
f'//
[@label="檢測到目標資料夾下已經存在相同名稱 [{file_name}] 的資料夾, 確定要繼續匯入嗎?"]') == "True":
file_name 屬於不確定內容,可以改為:
if self.is_element_present(MobileBy.XPATH,
'//[@label="溫馨提示"]') == "True" and self.is_element_present(MobileBy.IOS_PREDICATE, "type == 'XCUIElementTypeStaticText' AND value CONTAINS '檢測到目標資料夾下已經存在相同名稱'") == "True":
這種寫法的好處是,無論檔名稱如何變化,都不影響結果判斷。
3、Android 中可以用 len(列表) 長度進行判斷,IOS 判斷一個列表為空,無法使用 len(列表) 長度進行判斷,但可以使用:是否存在 label="空列表來判斷:
示例如下:
if self.is_element_present(MobileBy.XPATH, '//
[@label="空列表"]') == 'True':

相關文章