AppleScript - GUI-Skripterstellung und Einstellung von Kontrollkästchen, Optionsfeldern und Feldwerten

Ich arbeite an einem GUI-Scripting-AppleScript, das für das geöffnete FileMaker Pro Advanced-Dokument zum Menü „Datei“ geht und das Dialogfeld „Dateioptionen“ auswählt und dann einige Kontrollkästchen/Optionsfelder und Feldwerte festlegt.

Das Dialogfeld sieht folgendermaßen aus:

Geben Sie hier die Bildbeschreibung ein

Ich möchte, dass mein Skript Folgendes tut:

  1. Aktivieren Sie das Kontrollkästchen "Anmelden mit:", falls es noch nicht aktiviert ist
  2. Wählen Sie das Optionsfeld "Kontoname und Kennwort", falls es noch nicht ausgewählt ist
  3. Geben Sie einen Wert in das Feld "Konto:" ein
  4. Geben Sie einen Wert in das Feld "Passwort:" ein
  5. Klicken Sie auf die Schaltfläche OK

Ich habe es geschafft, das Dialogfeld zu öffnen, aber ich komme nicht über das Setzen des Kontrollkästchens hinaus - dies ist mein erstes Mal mit GUI-Skripting. Ich verwende OS X Yosemite 10.10.3.

Hier ist mein Skript:

-- check that GUI Scripting is available

GUIScripting_status()


-- bring FileMaker Pro Advanced to the front

tell application "FileMaker Pro Advanced"
    activate
end tell


setfmFileOptions()

on click_button(app_name, button_name)
    try
        tell application app_name
            activate
        end tell
        tell application "System Events"
            tell process app_name
                click button button_name of front window
            end tell
        end tell
        return true
    on error error_message
    end try
end click_button


on do_menu(app_name, menu_name, menu_item)
    try
        -- bring the target application to the front
        tell application app_name
            activate
        end tell
        tell application "System Events"
            tell process app_name
                tell menu bar 1
                    tell menu bar item menu_name
                        tell menu menu_name
                            click menu item menu_item
                        end tell
                    end tell
                end tell
            end tell
        end tell
        return true
    on error error_message
        return false
    end try
end do_menu


on setfmFileOptions()

    -- choose the Developer Utilities menu item from the Tools menu of FileMaker Pro Advanced

    do_menu("FileMaker Pro Advanced", "File", "File Options...")


    -- click the "Log in using" checkbox:

    if (exists checkbox "Log in using:" of window 1) is true then
 click checkbox "Log in using:" of window 1
 end if


end setfmFileOptions


on GUIScripting_status()
    -- check to see if assistive devices is enabled
    tell application "System Events"
        set UI_enabled to UI elements enabled
    end tell
    if UI_enabled is false then
        tell application "System Preferences"
            activate
            set current pane to pane id "com.apple.preference.universalaccess"
            display dialog "This script utilizes the built-in Graphic User Interface Scripting architecture of Mac OS x which is currently disabled." & return & return & "You can activate GUI Scripting by selecting the checkbox \"Enable access for assistive devices\" in the Universal Access preference pane." with icon 1 buttons {"Cancel"} default button 1
        end tell
    end if
end GUIScripting_status

Es wird nicht kompiliert und gibt diesen Fehler zurück. Die Zeile " if (exists checkbox "Log in using:" of window 1) is true then":

Geben Sie hier die Bildbeschreibung ein

Antworten (1)

versuchen Sie diese kleine Syntaxänderung:

on setfmFileOptions(app_name)

    -- choose the Developer Utilities menu item from the Tools menu of FileMaker Pro Advanced

    do_menu(app_name, "File", "File Options...")


    -- click the "Log in using" checkbox:
    tell application "System Events"
        tell process app_name
            repeat until (exists checkbox "Log in using:" of tab group 1 of window 1)
                delay 1
            end repeat
            click checkbox "Log in using:" of tab group 1 of window 1
        end tell
    end tell
end setfmFileOptions

Sie können Fenster 1 nicht verwenden, ohne mitzuteilen, in welchem ​​Prozessfenster 1 sich befindet. Sie müssen jetzt app_name als Parameter angeben.

Also so:

setfmFileOptions("FileMaker Pro Advanced")
Danke für deine Antwort. Ich habe mein Skript mit Ihren Vorschlägen aktualisiert, aber es klickt nicht auf das Kontrollkästchen. Es sieht so aus wie die Zeile: if (exists checkbox "Log in using" of window 1) is true then is nicht erkannt, da ich ein Dialogfeld als Teil dieses Zweigs hinzugefügt habe und das Dialogfeld nicht angezeigt wird. Irgendwelche Ideen warum oder alternative Syntaxvorschläge?
Probieren Sie den aktualisierten Code aus. Es kann eine Weile dauern, bis das Kontrollkästchen verfügbar wird, nachdem Sie das Erscheinen eines Fensters angewiesen haben. Sie müssen eine Weile nachsehen, ob es vorhanden ist, um zu wissen, wann Sie darauf klicken müssen. Dieser aktualisierte Code sollte das tun.
Danke - ich habe es ein paar Minuten laufen lassen, aber immer noch kein Ergebnis. Es ist, als würde es das Fenster nicht "sehen" - ich habe versucht, den Fensternamen anhand seines Fenstertitels anzugeben, aber das hat keinen Unterschied gemacht. Irgendwelche anderen Vorschläge?
Eine Möglichkeit, um festzustellen, worauf Sie klicken sollten, ist die Verwendung dieses Codes: tell application "System Events" to get checkboxes of window 1 of process "FileMaker Pro Advanced"Sehen Sie sich die ggf. zurückgegebenen Kontrollkästchen an, wenn Sie nicht finden, wonach Sie suchen, versuchen Sie Folgendes: Fügen Sie dann weiter tell application "System Events" to get checkboxes of UI elements of window 1 of process "FileMaker Pro Advanced"hinzu of UI elements, checkboxesbis Sie erhalten das gesuchte Kontrollkästchen. Dies ist eine einfache Methode zum Crawlen der Ansichtshierarchie. Tun Sie dies jedoch in einem separaten Skript.
Wenn das Kontrollkästchen jedoch nicht benannt ist, müssen Sie möglicherweise durch Ausprobieren feststellen, ob ein bestimmtes Kontrollkästchen das ist, nach dem Sie suchen. Es hängt davon ab, wie die Entwickler ihre Benutzeroberfläche gestaltet haben.
Danke - das hat mir geholfen, das Kontrollkästchen zu isolieren. Die erforderliche Syntax lautete checkbox "Log in using:" of tab group 1 of window 1- danke, dass Sie mich in die richtige Richtung gewiesen haben. Ich lerne im Laufe der Zeit mehr über die AppleScript-Syntax.
Ich habe Ihre Antwort akzeptiert, aber Sie möchten sie vielleicht bearbeiten, um die einzuschließencheckbox "Log in using:" of tab group 1 of window 1
Großartig! Antwort bearbeitet.