Simulator.app 中自动切换菜单设置的 Automator 脚本
Automator script to automatic toggle menu setting in Simulator.app
我需要为我的 UITests 自动注册 Face ID 和 Touch ID。为此,我正在编写一个自动化脚本。
我当前的自动化脚本,目前可以自动点击菜单中的"Enrolled":
on run {input, parameters}
if application "Simulator" is running then
tell application "System Events"
set theName to name of the first process whose frontmost is true
end tell
tell application "Simulator" to activate
tell application "System Events"
tell process "Simulator"
tell menu bar 1
tell menu bar item "Hardware"
tell menu "Hardware"
tell menu item "Face ID"
tell menu "Face ID"
click (menu item "Face ID" where its name starts with "Matching")
end tell
end tell
end tell
end tell
end tell
end tell
end tell
tell application theName to activate
end if
return input
end run
问题如下。我需要确定设备是否已经注册。有一个复选标记,显示当前状态。我试图检查复选标记是否存在。但是我还没有成功。
所以我的问题。我该怎么做,如果复选标记不存在,脚本只会按 'Enrolled' 菜单项?
menu items
有一个名为 AXMenuItemMarkChar
的属性,它要么设置为代表菜单项旁边复选标记的字符(如果选中),要么 missing value
。
use application "System Events"
tell application "Simulator" to activate
tell process "Simulator" to tell menu bar 1 to ¬
tell menu bar item "Hardware" to tell menu "Hardware" to ¬
tell menu item "Face ID" to tell menu "Face ID" to ¬
tell menu item "Enrolled"
if the value of the attribute "AXMenuItemMarkChar" is not "✓" then ¬
click it
delay 1 -- !important
return the value of the attribute "AXMenuItemMarkChar"
end tell
在我的测试中,如果 Simulator 应用当时处于焦点状态,则属性 return 是正确的值。此脚本的 return 值应始终为“✓”,因为如果菜单项 未被 选中,则脚本会继续单击它并在下一步放置一个复选标记对它;如果菜单项 被 选中,那么除了通过获取属性的值来确认它之外别无他法。
您的脚本的一个问题是您错误地引用了一个不存在的菜单项 (menu item "Face ID" of menu "Face ID" of menu item "Face ID"
),然后继续使用 where
子句过滤它具有不同值的名称;因此它 return 没有任何价值,您也没有可以点击的菜单项。
希望我的脚本对您有用。如果您有任何问题,请告诉我。
此答案中包含的 AppleScript 在 MacOS 10.13 上进行了测试。这是一个示例脚本,用于说明如何满足您的 objective。 delay
命令可能需要根据您的系统进行调整,脚本可能会受益于一些错误处理以使其健壮。
我需要为我的 UITests 自动注册 Face ID 和 Touch ID。为此,我正在编写一个自动化脚本。
我当前的自动化脚本,目前可以自动点击菜单中的"Enrolled":
on run {input, parameters}
if application "Simulator" is running then
tell application "System Events"
set theName to name of the first process whose frontmost is true
end tell
tell application "Simulator" to activate
tell application "System Events"
tell process "Simulator"
tell menu bar 1
tell menu bar item "Hardware"
tell menu "Hardware"
tell menu item "Face ID"
tell menu "Face ID"
click (menu item "Face ID" where its name starts with "Matching")
end tell
end tell
end tell
end tell
end tell
end tell
end tell
tell application theName to activate
end if
return input
end run
问题如下。我需要确定设备是否已经注册。有一个复选标记,显示当前状态。我试图检查复选标记是否存在。但是我还没有成功。
所以我的问题。我该怎么做,如果复选标记不存在,脚本只会按 'Enrolled' 菜单项?
menu items
有一个名为 AXMenuItemMarkChar
的属性,它要么设置为代表菜单项旁边复选标记的字符(如果选中),要么 missing value
。
use application "System Events"
tell application "Simulator" to activate
tell process "Simulator" to tell menu bar 1 to ¬
tell menu bar item "Hardware" to tell menu "Hardware" to ¬
tell menu item "Face ID" to tell menu "Face ID" to ¬
tell menu item "Enrolled"
if the value of the attribute "AXMenuItemMarkChar" is not "✓" then ¬
click it
delay 1 -- !important
return the value of the attribute "AXMenuItemMarkChar"
end tell
在我的测试中,如果 Simulator 应用当时处于焦点状态,则属性 return 是正确的值。此脚本的 return 值应始终为“✓”,因为如果菜单项 未被 选中,则脚本会继续单击它并在下一步放置一个复选标记对它;如果菜单项 被 选中,那么除了通过获取属性的值来确认它之外别无他法。
您的脚本的一个问题是您错误地引用了一个不存在的菜单项 (menu item "Face ID" of menu "Face ID" of menu item "Face ID"
),然后继续使用 where
子句过滤它具有不同值的名称;因此它 return 没有任何价值,您也没有可以点击的菜单项。
希望我的脚本对您有用。如果您有任何问题,请告诉我。
此答案中包含的 AppleScript 在 MacOS 10.13 上进行了测试。这是一个示例脚本,用于说明如何满足您的 objective。 delay
命令可能需要根据您的系统进行调整,脚本可能会受益于一些错误处理以使其健壮。