我需要为我的UITests自动注册Face ID和Touch ID。为此,我正在研究一个自动化脚本。
我当前的自动播放器脚本,此刻可以自动点击菜单中的“已注册”:
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
问题如下。如果设备已经注册,我需要确定。有一个复选标记,显示当前状态。我试图检查复选标记是否存在。但我还没能使它成功。
所以我的问题。我该怎么办,所以如果没有复选标记,脚本只会按下'已注册'菜单项?
答案 0 :(得分:2)
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 应用程序当时处于焦点,则该属性返回正确的值。此脚本的返回值应始终为"✓",因为如果菜单项未经过检查,则脚本会继续单击并添加复选标记在它的旁边;如果菜单项被选中,则无需做任何事情,只能通过获取属性的值来确认。
您的脚本的一个问题是您对不存在的菜单项(menu item "Face ID" of menu "Face ID" of menu item "Face ID"
)有错误的引用,然后继续使用where
子句对其名称进行过滤有不同的价值;因此它不会返回任何值,并且您没有要点击的菜单项。
希望我的脚本能为您服务。如果您有任何问题,请告诉我。
此答案中包含的AppleScript在MacOS 10.13上进行了测试。这是一个示例脚本,用于说明如何实现您的目标。可能需要根据您的系统调整 delay
命令,并且脚本可能会受益于一些错误处理,以使其健壮。