如何在XCUITest中读取类复选框样式MenuItem的当前状态值
问题:如何获取类复选框样式菜单项的当前选中状态
我有一个外观类似复选框的菜单项:
我想要根据该菜单项的当前值决定是否点击它,请问如何获取它的当前值?
我目前用于访问和点击该元素的代码如下:
let menuBars = application.menuBars let outlineModeMenuItem = menuBars.menuItems["outline_mode"] outlineModeMenuItem.click()
该元素的结构如下:
Attributes: MenuItem, {{0.0, 401.0}, {220.0, 22.0}}, identifier: 'outline_mode', title: 'Outline Mode', Disabled Element subtree: →MenuItem, 0x11e14e410, {{0.0, 401.0}, {220.0, 22.0}}, identifier: 'outline_mode', title: 'Outline Mode', Disabled Path to element: →Application, 0x10f10cf00, pid: 90531, title: 'Vectornator', Disabled ↳MenuBar, 0x11e1178a0, {{0.0, 0.0}, {1440.0, 24.0}} ↳MenuBarItem, 0x11ce5bad0, {{401.0, 0.0}, {50.0, 24.0}}, title: 'View' ↳Menu, 0x11ce5bbe0, {{401.0, 24.0}, {220.0, 682.0}} ↳MenuItem, 0x11e14e410, {{0.0, 401.0}, {220.0, 22.0}}, identifier: 'outline_mode', title: 'Outline Mode', Disabled
该元素上下不存在任何“checkbox”类型的元素,它的value属性为空。UI层的复选框值是从UICommand.state读取的,但该属性似乎没有在XCUIElement上暴露。
解决方案
你可以通过以下几种方式获取该菜单项的选中状态:
- 读取
accessibilityValue属性
多数桌面端应用会将菜单项的开关状态写入无障碍属性中,你可以先打印元素的完整属性排查:
通常状态值会用print(outlineModeMenuItem.debugDescription) print(outlineModeMenuItem.accessibilityValue as Any)0/1、Off/On来对应未选中、选中状态,直接读取判断即可。 - 识别标题中的选中标记
系统原生的复选样式菜单项,选中状态下标题前会自动添加✓标记,你可以直接判断标题是否包含该字符:let isOutlineModeOn = outlineModeMenuItem.title.contains("✓") - 通过关联UI特征反推状态
如果以上两种方式都不可用,你可以通过该菜单项生效后的UI特征反向判断状态:比如开启大纲模式后,画布内的矢量元素会仅显示描边、隐藏填充,你可以读取画布元素的样式属性反推当前菜单项是否开启。 - (针对自研应用)绑定无障碍属性
如果你是该应用的开发者,可以直接将UICommand.state的取值绑定到该菜单项的accessibilityValue上,测试时直接读取该属性即可。
内容的提问来源于stack exchange,提问作者Paulius Liekis
相关产品推荐
相关产品推荐

