如何从 XCUITest 中的 MenuItem 读取值?

Posted

技术标签:

【中文标题】如何从 XCUITest 中的 MenuItem 读取值?【英文标题】:How to read a value from MenuItem in XCUITest? 【发布时间】:2021-09-13 20:58:05 【问题描述】:

我有一个看起来像复选框的菜单项:

我想根据当前值单击/不单击它。 如何获取当前值?

我的访问和点击代码如下所示:

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

所以它上面或下面没有任何“复选框”项。 value 因为它是空的:/ UI 从 UICommand.state 读取复选框值,但这似乎没有在 XCUIElement 上公开。

【问题讨论】:

【参考方案1】:

outlineModeMenuItem.isEnabled 是您正在寻找的电话。当它被选中时它应该返回true,当它没有被选中时它应该返回false

https://developer.apple.com/documentation/xctest/xcuielementattributes 记录了您可能感兴趣的其他属性检查。我之前没有使用过 MenuItem,因此 isSelected 可能就是您要查找的内容。

【讨论】:

如果这不起作用,您可能需要查看setAccessibilityValue() 函数,该函数可以在点击时动态修改。 isEnabled 告诉您按钮是否启用/禁用,即是否变灰。 isSelected 无论值是什么都会返回 false。 据我所知,对于复选框value 是有效的属性,但它不适用于MenuItem。我想我可以试试setAccessibilityValue,但这听起来开销很大,因为我必须修改UICommand 的每次使用... 无赖。我担心最后的手段会成为答案。抱歉,如果我面前没有类似的界面,我无法提供更多帮助。是的,这不是最干净的解决方案。 我只是惊讶于 XCTest 中看似简单的事情有多么困难......【参考方案2】:

到目前为止,一切都表明这是不可能的。

UICommandaccessibilityValue 但它似乎没有任何作用,实际上失去了价值。这个答案似乎也证实了这一点:https://***.com/a/60317536/217022

我发现的唯一方法是在您知道自己正在运行 UI 测试时修改 title。或者以与UICommand 无关的其他方式公开这些值。

【讨论】:

以上是关于如何从 XCUITest 中的 MenuItem 读取值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 XCUITest 读取 Json 文件?

如何从 PrimeNG 更改 MenuItem 中的样式

如何使用 swift xcuitest 从 pdf 文件中读取数据

XCUITest - 如何访问 XCUITest 中的应用设备令牌以触发推送通知,但无需在应用代码中设置任何 UIView?

单击 XCUITest 中的按钮后,如何验证和断言是不是正在播放动画?

如何打印 XCUITest 中的所有静态文本