如何从 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】:
到目前为止,一切都表明这是不可能的。
UICommand
有accessibilityValue
但它似乎没有任何作用,实际上失去了价值。这个答案似乎也证实了这一点:https://***.com/a/60317536/217022
我发现的唯一方法是在您知道自己正在运行 UI 测试时修改 title
。或者以与UICommand
无关的其他方式公开这些值。
【讨论】:
以上是关于如何从 XCUITest 中的 MenuItem 读取值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 swift xcuitest 从 pdf 文件中读取数据
XCUITest - 如何访问 XCUITest 中的应用设备令牌以触发推送通知,但无需在应用代码中设置任何 UIView?