最近做 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':