【发布时间】:2019-05-17 14:17:41
【问题描述】:
我正在用 AppleScript 编写一个脚本,该脚本以在应用程序中按下按钮结束。然而,问题是按钮没有属性标题。我已经在它上面运行了 Accessibility Inspector 和 UI Browser,AXTitle 是
我可以通过按钮的编号来调用按钮,但是我团队中的每个人都根据他们自己的工作流程稍微不同地设置了这个应用程序,而且愚蠢的按钮根据窗口的位置有不同的识别号。该窗口可以是分离的弹出窗口,也可以附加到左侧或右侧的主应用程序窗口。所有三个选项都会产生不同的索引地址。
附加到左侧时的按钮索引:
tell application "System Events" to tell process "Application Name"
click button 8 of splitter group 1 of front window of application
process "Application Name" of application "System Events"
end tell
附加到右侧时的按钮索引:
tell application "System Events" to tell process "Application Name"
click button 9 of splitter group 1 of front window of application
process "Application Name" of application "System Events"
end tell
窗口分离和浮动时的按钮索引:
tell application "System Events" to tell process "Application Name"
click button 8 of front window of application process "Application
Name" of application "System Events"
end tell
位置之间的常量是按钮标签和按钮标识符,但我无法让脚本编辑器根据标识符或准备响应来识别按钮。我不知道这是不可能的还是我只是写错了代码。
当我尝试使用标签或标识符时出现错误
click button "Prepared Response" of front window
脚本错误系统事件出错:无法获取进程“应用程序名称”窗口 1 的按钮“准备响应”。
click button "_NS:667" of front window
脚本错误系统事件出错:无法获取进程“应用程序名称”窗口 1 的按钮“_NS:667”。
click button with "Prepared Response" of front window
语法错误应为“into”、变量名、类名、其他参数名称或属性,但找到“”。
click button with label "Prepared Response" of front window
语法错误 应为“given”、“with”、“without”、其他参数名称等,但找到“”。
唯一的两个限制是代码必须是 AppleScript - 而不是 Javascript - 并且我不能要求我的团队成员安装应用程序
【问题讨论】:
-
它是什么应用程序?除了
AXTitle之外的其他属性或属性呢? -
这是一个内部专有应用程序,我的 NDA 阻止我在公共论坛上命名。它具有标签、启用、框架、帮助、标识符、位置、角色和大小。没有标题也没有价值。
-
这些是属性,它们听起来像是窗口的属性,而不是按钮。不要忘记还有属性,它们与属性不同。运行
tell app "System Events" to tell process AppName to return the {name, value} of every attribute of button 8 of splitter group 1 of window 1行(或任何适用于您的系统的参考),这将为您提供可用于标识按钮的属性的名称和值列表。您可以对every property执行相同的操作(description和role description有时具有有用的值)。 -
{{"AXRole"、"AXHelp"、"AXEnabled"、"AXWindow"、"AXSize"、"AXTitle"、"AXRoleDescription"、"AXTopLevelUIElement"、"AXFocused"、"AXDescription"、 "AXParent", "AXPosition", "AXFrame", "AXIdentifier"}, {"AXButton", "Responses", true, 应用程序“系统事件”的应用程序进程“AppName”的窗口“电子邮件”, {31, 19} , "", "button", 缺失值, false, "Response", 应用程序 "System Events" 的应用程序进程 "AppName" 的窗口 "Email", {1693, 105}, {1693, 105, 1724, 124}, "_NS:667"}}
-
AXHelp、AXDescription和AXIdentifier每个看起来都是唯一标识该按钮的可行候选者。我看到您尝试使用"_NS:667",但您这样做不正确,因为您尝试将其替换为按钮的名称,但您不能这样做。您可以这样做:tell app "System Events" to tell process AppName to tell window 1 to get the first button whose value of attribute "AXIdentifier" = "_NS:667",或者与其他两个属性类似,这取决于您认为最好使用的属性。那么这应该适用于所有系统,无论如何。
标签: applescript