Automator脚本自动切换Simulator.app中的菜单设置

时间:2018-02-07 12:03:56

标签: xcode applescript ios-simulator xcode-ui-testing automator

我需要为我的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 

问题如下。如果设备已经注册,我需要确定。有一个复选标记,显示当前状态。我试图检查复选标记是否存在。但我还没能使它成功。

enter image description here

所以我的问题。我该怎么办,所以如果没有复选标记,脚本只会按下'已注册'菜单项?

1 个答案:

答案 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 命令,并且脚本可能会受益于一些错误处理,以使其健壮。