Автоматизация пользовательского интерфейса, клавиатурные сокращения appleScript для элементов без меню

Мы можем написать функцию полезности, которая внутренне обрабатывает None -изложенные случаи и вызывает исключение / возвращает некоторое фиктивное значение данного типа:

from xml.etree.ElementTree import Element


def find(element: Element,
         tag: str) -> Element:
    result = element.find(tag)
    assert result is not None, ('No tag "{tag}" found '
                                'in element "{element}".'
                                .format(tag=tag,
                                        element=element))
    return result

преимущество утверждений (по сравнению с повышением исключения вручную) заключается в том, что они могут быть отключены , но если вы работаете с некоторыми данными по отдельности, я рекомендую поднять исключение, например

if result is None:
    raise LookupError('No tag "{tag}" found '
                      'in element "{element}".'
                      .format(tag=tag,
                              element=element))

Отступление

Я использую аннотации типов, так как это помогает IDE, и это также экономит много времени при чтении API, но я не являюсь пользователем mypy, потому что мне не нравится идея проверять все, как в этом случае: если функция пользователя передает мусор, то это его вина, мы должны позволить ему сделать это вместо того, чтобы что-то писать о «у вас есть объединение типов и не обрабатывать случаи с некоторыми из них», EAFP после всех .

0
задан Dmomo 18 January 2019 в 20:55
поделиться

1 ответ

Эта работа для меня с использованием последней версии MacOS Mojave

tell application "Preview" to activate
repeat while application "Preview" is not running
    delay 0.2
end repeat
tell application "System Events"
    try
        click menu item "Show Markup Toolbar" of menu 1 of menu bar item "View" of menu bar 1 of application process "Preview"
    end try
    delay 0.5
    try
        click menu item "Show Toolbar" of menu 1 of menu bar item "View" of menu bar 1 of application process "Preview"
    end try
    delay 0.5
    repeat while not (exists of toolbar 1 of window 1 of application process "Preview")
        delay 0.2
    end repeat
    set description2 to a reference to every checkbox of toolbar 1 of window 1 of application process "Preview"
    set theCheckboxes to description of description2

    if item 1 of theCheckboxes is "Draw" then
        set checkBoxDraw to 1
    else
        set checkBoxDraw to 2
    end if
    if item 1 of theCheckboxes is "Sketch" then
        set checkBoxSketch to 1
    else
        set checkBoxSketch to 2
    end if
    delay 1
    -- Below, insert either  checkBoxSketch for "Sketch" or checkBoxDraw for "Draw" 
    click checkbox checkBoxDraw of toolbar 1 of window 1 of application process "Preview"
end tell
-- without these next following lines, the toolbar  "Draw" or "Sketch" do not appear to be selected
tell application "Preview" to tell window 1
    set visible to false
    set visible to true
end tell
delay 3
0
ответ дан wch1zpink 18 January 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: