Простой вопрос сценариев GUI - PullRequest
0 голосов
/ 13 августа 2010

Я пытаюсь с помощью этого простого графического сценария открыть новое окно Safari:

tell application "Safari"
    activate
end tell

tell application "System Events"
    tell process "Safari"
        try
            tell menu bar 1
                tell menu bar item 3
                    click menu item 1
                end tell
            end tell
        on error theError
            display dialog ("An error occurred while performing requested action" & theError) buttons "OK" default button "OK"
        end try
    end tell
end tell

, но выдает это сообщение об ошибке:

Ожидаемый конец строки, но найден"" "

Может кто-нибудь подсказать мне, где я могу ошибаться?

Спасибо,

Miraaj

1 Ответ

1 голос
/ 13 августа 2010

Ух ты, это было странно. Ваш скрипт сломал редактор AppleScript. После запуска вашего скрипта, и он не работает ... Я попытался перекомпилировать скрипт, а затем появилась ошибка, которую вы опубликовали. Так что каким-то образом ваш код вызвал поломку редактора AppleScript и, как следствие, ошибку. Мне пришлось выйти и перезапустить AppleScript Editor, чтобы он снова заработал.

Я использовал браузер приложения и обнаружил проблему. Ваша ссылка на пункт меню была неправильной. Там есть дополнительное меню, которое мы не видим ... и вы не ссылались на это дополнительное меню. Это проблема с GUI-скриптингом. И даже если скрипт GUI работает, он может сломаться в будущем, когда приложение будет обновлено. Поэтому избегайте сценариев графического интерфейса, если это возможно.

В любом случае, вот как должен выглядеть ваш код ...

tell application "Safari"
    activate
end tell

tell application "System Events"
    tell process "Safari"
        try
            tell menu bar 1
                tell menu bar item 3
                    click menu item 1 of menu 1
                end tell
            end tell
        on error theError
            display dialog ("An error occurred while performing requested action " & theError) buttons "OK" default button "OK"
        end try
    end tell
end tell

EDIT: Как я уже упоминал в своем комментарии ниже, если вы не можете найти собственную команду из словаря приложения, следующий наиболее надежный метод - использование сочетаний клавиш. У большинства пунктов меню есть они. Например, если я хочу открыть новую вкладку в окне, этот пункт меню имеет комбинацию клавиш command -t. Таким образом, мы можем использовать это так. Обратите внимание, что есть встроенная команда для открытия новой вкладки без нажатия клавиш, я просто показываю это в качестве примера.

tell application "Safari" to activate
tell application "System Events"
    keystroke "t" using command down
end tell
end

Команды клавиатуры обычно не меняются между обновлениями приложений, в то время как команды gui часто делают это, потому что программисты переделывают свой интерфейс в обновлениях ... и когда это происходит, сценарии графического интерфейса пользователя теряют популярность. Одна из проблем, связанных с написанием сценариев с использованием графического интерфейса и нажатием клавиш, заключается в том, что иногда сценарий выполняется слишком быстро, и эти методы не успевают за скоростью программы, поэтому они часто дают ошибку. Когда это происходит, вам нужно замедлить работу сценария с небольшими задержками, чтобы интерфейс не отставал от сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...