gpt4 book ai didi

error-handling - applescript:将 "whose"和 "exists"工作到同一行

转载 作者:行者123 更新时间:2023-12-04 06:47:37 25 4
gpt4 key购买 nike

我的问题最好用一行代码来说明:

tell application "System Events" to tell application process "Dock" ¬
to tell list 1 to first UI element whose value of attribute "AXTitle" ¬
is "Trash"

这以错误结束,因为并非 Dock 中的每个 UI 元素 都具有 attribute "AXTitle"停靠分隔项只有AXRoleAXRoleDescription

我想知道尽管如此,是否有办法让代码返回正确的UI 元素

这是我尝试过但失败了的:

1) try block: 这只是跳过这行代码并继续下一行

2) 忽略应用程序响应 block :同上。

3) exists(attribute "attributeName"):我能够测试每个单独的 UI 元素,例如UI 元素 1 的 exists(属性“AXTitle”),但我无法将 exists 工作到 whose 语句中:它应该看起来像这样:

UI elements whose (exists (attribute "AXTitle") is true)

那是行不通的。现在我必须运行一个 repeat with 循环、一个 if 语句和一个 exit repeat 以便我可以循环遍历所有内容。这很麻烦。

必须有更好的方法。

澄清:一些人向我展示了更优雅的方式来访问Trash。我以 Trash 为例,但意思是问题更广泛,即当列表中的项目缺少该属性时,如何根据属性找到列表的第一项。另一个例子是:

delay 5
tell application "System Events" to tell application process "Dock" ¬
to tell list 1 to first UI element whose value of attribute ¬
"AXSelected" is true

然后将光标移动到 Dock 中的任何项目。此示例失败,因为 Dock Separator 没有公共(public)字段“AXSelected”。

最佳答案

只需像这样添加另一个条件:其子角色不是“AXSeparatorDockItem”

tell application "System Events"
tell application process "Dock" to tell list 1 to (first UI element whose subrole is not "AXSeparatorDockItem" and its selected is true)
end tell

--

更新:您可以使用title 属性代替属性“AXTitle”的值,这不会出错。

tell application "System Events"
tell application process "Dock" to tell list 1 to UI elements whose title is "Trash"
end tell

关于error-handling - applescript:将 "whose"和 "exists"工作到同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29716709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com