Sto cercando di creare un oggetto Applescript per automatizzare un'interazione con un'applicazione che ha una menulet di terze parti (elemento della barra dei menu, in alto a destra). L'applicazione in questione si chiama Pomodoro One . Non ha il supporto di Applescript incorporato, quindi voglio creare uno script che faccia clic sulla sua barra dei menu e preme "Avvia Pomodoro".
Dopo ore di ricerca su Internet e sperimentazione con Script Editor , oltre alla creazione di un'automazione visiva con Automator, ho realizzato questo script che DOVREBBE lavorare :
tell application "Pomodoro One"
activate
end tell
tell application "System Events"
tell UI element "Pomodoro One"
tell menu bar item 1 of menu bar 2
click menu item 1 of menu 1
end tell
end tell
end tell
Tuttavia, non funziona. Sorprendente, soprattutto dal momento che l'automazione di Automator funziona e questo script è fondamentalmente una parafrasi di Applescript in cui Automator converte la sua automazione visiva in. Questo è l'errore che ottengo, sia da ScriptEditor che dall'esecuzione di Applescript in Automator:
System Events got an error: Can’t get menu 1 of menu bar item 1 of menu bar 2 of UI element "Pomodoro One". Invalid index.
Quello che penso stia succedendo è che quando Applescript tenta di fare clic su menu bar 2
(che rappresenta la menulet), il menu che dovrebbe apparire non lo fa. Come se il click non stesse accadendo del tutto. Tuttavia, sono davvero in grado di fare clic su menu bar 1
(che rappresenta la barra dei menu principale di Pomodoro One). Questo è il motivo per cui il clic su menu bar 2
non produce nulla, specialmente dal momento che l'UI di debug di app come UI Browser segnala infatti che la menulet è rappresentata da menu bar 2
quando eseguo il profiling visivo dell'interfaccia utente.
Ci sono ore in questo e mi sento molto bloccato. Mi chiedo se ci sia un modo per far sì che Applescript giochi bene con la menulet di qualsiasi applicazione di terze parti.
Modifica
In base a questo post ( link ), ho modificato il mio script in modo che fosse il seguente:
ignoring application responses
tell application "System Events" to tell process "Pomodoro One"
click menu bar item 1 of menu bar 2
end tell
end ignoring
do shell script "killall System\ Events"
delay 0.1
tell application "System Events" to tell process "Pomodoro One"
tell menu bar item 1 of menu bar 2
click menu item "Start Pomodoro" of menu 1
end tell
end tell
Questa volta, la sceneggiatura si invererà in modo infinito e alla fine si esaurirà con l'errore -1712: System Events got an error: AppleEvent timed out.
Posso assicurarti che l'accessibilità è abilitata, tramite Preferenze di Sistema - > Sicurezza e privacy - > Accessibilità sia per Pomodoro One che per Script Editor.