You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:15:01