Как написать сценарий нажатия кнопки на основе метки или идентификатора - PullRequest
1 голос
/ 17 мая 2019

Я пишу скрипт на AppleScript, который заканчивается нажатием кнопки в приложении.Проблема, однако, заключается в том, что кнопка не имеет заголовка атрибута.Я запустил над ним Accessibility Inspector и UI Browser, и AXTitle.

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


Индекс кнопки при прикреплении слева:

tell application "System Events" to tell process "Application Name"
    click button 8 of splitter group 1 of front window of application 
    process "Application Name" of application "System Events"
end tell




Индекс кнопки при прикреплении справа:

tell application "System Events" to tell process "Application Name"
    click button 9 of splitter group 1 of front window of application 
    process "Application Name" of application "System Events"
end tell




Индекс кнопки, когда окно отсоединено и перемещено:

tell application "System Events" to tell process "Application Name"
    click button 8 of front window of application process "Application    
    Name" of application "System Events"
end tell




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

Когда я пытаюсь использовать Метку или Идентификатор, я получаю ошибки

click button "Prepared Response" of front window

Ошибка сценария Системные события получили ошибку: Не удается получить кнопку «Подготовленный ответ» окна 1 процесса «Имя приложения».

click button "_NS:667" of front window

Ошибка сценария Системные события получили ошибку: не удается получить кнопку «_NS: 667» окна 1 процесса «Имя приложения».

click button with "Prepared Response" of front window

Синтаксическая ошибка Ожидается «в», имя переменной, имя класса, другое имя параметра или свойство, но найдено «» ».

click button with label "Prepared Response" of front window

Синтаксическая ошибка Ожидается« задано »,« с »,« без », другое имя параметра и т. д.но нашел "" ".


Единственное ограничение состоит в том, что код должен быть AppleScript, а не Javascript, и что я не могу требовать от членов моей команды установки приложения

1 Ответ

0 голосов
/ 17 мая 2019

Вот подход, который может работать для вас.

AppleScript имеет возможность изменять значения property и сохранять эти новые значения property при каждом запуске сценария.Однако, если скрипт будет перекомпилирован в любое время, те новые значения property, которые были изменены, будут потеряны и вернутся к своим исходным значениям.

В этом следующем коде я установил переменную property launchCount : 0 инесколькими строками вниз я установил другую переменную set launchCount to launchCount + 1.Поэтому при каждом запуске сценария property launchCount : 0 будет изменяться с 0 на 1, затем на 2, затем на 3 и т. Д. *

Цель этого подхода заключается в том, чтобы на каждом отдельном компьютере, который запускает сценарий для первоговремя появляется диалоговое окно choose from list, в котором пользователю предлагается выбрать местоположение своего окна.Этот выбор будет сохранен в другой переменной property windowIsLocated.Затем нужно было установить обработчик с условным предложением ... например: if windowIsLocated is this then do that else if windowIsLocated is that then do this

property launchCount : 0
property windowIsLocated : missing value

set launchCount to launchCount + 1

set theList to {"Window Attached To Left", "Window Attached To Right", "Window Is Floating"}

if launchCount is 1 then
    set windowLocation to choose from list theList ¬
        with title "Window Location" with prompt ¬
        "Please Choose The Location Of Your Window" OK button name ¬
        "OK" cancel button name ¬
        "Cancel" multiple selections allowed false ¬
        without empty selection allowed
    set windowIsLocated to item 1 of windowLocation
end if

clickTheButton() -- use this anywhere in your script to click the button 

to clickTheButton()
    if windowIsLocated is "Window Attached To Left" then
        tell application "Application Name"
            activate
            repeat until frontmost
                delay 0.1
            end repeat
        end tell
        tell application "System Events" to tell process "Application Name"
            click button 8 of splitter group 1 of front window
        end tell
    else if windowIsLocated is "Window Attached To Right" then
        tell application "Application Name"
            activate
            repeat until frontmost
                delay 0.1
            end repeat
        end tell
        tell application "System Events" to tell process "Application Name"
            click button 9 of splitter group 1 of front window
        end tell
    else if windowIsLocated is "Window Is Floating" then
        tell application "Application Name"
            activate
            repeat until frontmost
                delay 0.1
            end repeat
        end tell
        tell application "System Events" to tell process "Application Name"
            click button 8 of front window
        end tell
    end if
end clickTheButton

Читая все комментарии к вашему сообщению, я решил добавить .gif, который демонстрирует использованиеAutomator.app "Watch Me Do" записывает, как я нажимал на некоторые кнопки в Системных настройках, затем копировал эти действия в Редактор сценариев и использовал элементы этого кода для идентификации кнопок и окон и т. Д.

enter image description here

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