9

これが AppleScript や Automator を介して実行できるかどうかはわかりませんが、次のことができるようにしたいと考えています。

a)アプリケーションを起動します(これはAppleScriptまたはAutomatorで非常に簡単に実行できることを知っています)

b) アプリケーションが起動したら、AppleScript または Automator を使用して特定のメニュー項目を選択します。

たとえば、Excel 2008 を起動し (Automator 用に事前構成されていないホーム/学生版を持っています)、[ファイル] メニューをクリックして [開く] をクリックします。

このようなメニュー項目を選択する方法 (またはそれが可能である場合) をどこに行く/探すべきかについての指針はありますか?

Automator の Record 関数を使用してこれを「ある程度」行うことができますが、Record は非常に脆弱です。

AppleScript を使用して、アプリケーションのすべてのメニュー項目を含む「配列」を単純に取得し、配列の 0 番目のメニュー項目をプログラムでクリックできるようにしたいと考えています。等

これは可能ですか?

ティア

4

5 に答える 5

6
tell application "###"

activate

end tell


tell application "System Events"

tell process "###"

click menu item "^^^" of menu "$$$" of menu bar 1

end tell

end tell

アプリケーションを ### に、メニュー項目を ^^^ に、メニュー (ファイル、編集、表示など) を $$$ に入れます。大文字小文字が重要です。

ところでそれをapplescriptに入れてください

例:

tell application "iTunes"

activate

end tell


tell application "System Events"

tell process "iTunes"

click menu item "as list" of menu "view" of menu bar 1

end tell

end tell

END TELL と TELL APPLICATION "SYSTEM EVENTS" の間を除いて、ダブル スペースを削除します。

于 2012-06-29T20:50:53.107 に答える
3

メニュー項目が表すオブジェクトや機能への直接アクセスを AppleScript ライブラリが提供しないアプリケーションのメニュー項目にアクセスするための GUI スクリプトを頻繁に作成する必要があります。コードを簡単に再利用できるように、アプリ、メニュー、およびメニュー項目の名前に変数を使用します。次に、コード本体から名前を選択するのではなく、上部の変数を変更するだけです。

set targetApp to "app_name"
set theMenu to "menu_name"
set theItem to "menu_item_name"

tell application targetApp
    activate
    tell application "System Events"
        tell application process targetApp
            tell menu bar 1
                tell menu bar item theMenu
                    tell menu theMenu
                        click menu item theItem
                    end tell
                end tell
            end tell
        end tell
    end tell
end tell

サブメニュー

サブメニューとサブサブメニューが関係している場合は、もう少し複雑になります。サブメニューを持つメニュー項目は、その親メニューのメニュー項目であり、そのサブメニューのメニュー親でもあるためです。テキスト変数「theItem」は、メニュー項目とメニューの両方を指定するために使用されることに注意してください。「targetApp」文字列変数は、アプリとプロセスの両方を参照するために使用されるため、コードを再利用するときに、2 つの名前をそれぞれ 2 か所で編集する必要がなくなります。このスクリプトを使用して、メニュー項目にすばやくアクセスするための音声コマンドを実行します。たとえば、「[メニューの編集] をクリックしてください」...「変換をクリックしてください」...「[大文字にする] をクリックしてください」... 別の変数を追加しますサブメニュー項目の場合:

set targetApp to "app_name"
set theMenu to "menu_name"
set theItem to "menu_item_name"
set theSubItem to "sub_item_name"

tell application targetApp
    activate
    tell application "System Events"
        tell application process targetApp
            tell menu bar 1
                tell menu bar item theMenu
                    tell menu theMenu
                        tell menu item theItem
                            tell menu theItem
                                click menu item theSubItem
                            end tell
                        end tell
                    end tell
                end tell
            end tell
        end tell
    end tell
end tell

例えば:

set targetApp to "TextEdit"
set theMenu to "Edit"
set theItem to "Transformations"
set theSubItem to "Make Upper Case"

tell application targetApp
    activate
    tell application "System Events"
        tell application process targetApp
            tell menu bar 1
                tell menu bar item theMenu
                    tell menu theMenu
                        tell menu item theItem
                            tell menu theItem
                                click menu item theSubItem
                            end tell
                        end tell
                    end tell
                end tell
            end tell
        end tell
    end tell
end tell

別のレベルのサブメニューがある場合は、追加の変数 (「theSubSubItem」など) が必要になり、システム イベント プロセスの Tell ブロッ​​クの行に別のレイヤーが含まれ
ます ...

                            tell menu item theItem
                                tell menu theSubItem
                                    click menu item theSubSubItem
                                end tell
                            end tell

...
このスレッドの他の場所で述べたように、アプリケーションのオブジェクトと関数が API に含まれている場合は常にそれらに直接対処することをお勧めしますが、GUI に対処することは、API が直接アクセスを提供しない場合の最後の手段として役立ちます。欠点は、GUI スクリプトが煩雑になり、アプリケーションの更新ごとに修正が必要になる可能性があることです。

于 2019-12-13T23:12:23.790 に答える
2

確かに、UI スクリプトは壊れやすく扱いにくいものですが、Apple のAppleScript GUI Scripting ページを参照してください。

于 2011-02-16T21:35:07.297 に答える
1

UIスクリプトは気まぐれな獣です。それはもろく、多くの場合、予期しないダイアログ(他のアプリケーションからの)、システムのフォントや言語の変更、ユーザーアクティビティなど、制御できない多くのことに敏感です。バージョン間でのアプリケーションのUIの変更は言うまでもありません。

AppleScriptAPIを介してアプリケーションと直接トークを使用する方がはるかに堅牢です。これがまさにAppleScriptの目的です。AppleScriptEditor.appの[OpenDictionary ...]メニュー項目を使用して、アプリケーションがAppleScriptを介して提供できるアクションとデータをいつでも確認できます(ファイルダイアログでスクリプトを作成するアプリケーションを選択します)。メニュー上でのマウスクリックをシミュレートする代わりに、メニュー項目がトリガーするアクションをAppleScriptを介して直接呼び出します。

もちろん、すべてのアプリケーションが完全な(または任意の)AppleScriptAPIを備えているわけではありません。ただし、それがターゲットである場合、Excelは優れたAppleScriptサポートを備えています。

UIテストを実際に行おうとしている場合は、他のオプションから始めることをお勧めします。

  1. モデルをテストします(AppleScriptを介したアプリのモデルのスクリプト作成に類似しています)。実際、アプリにAppleScript APIを含めると、そのAPIのテストを自動化することもできます。
  2. Google Toolbox for Macの単体テストの追加(または独自のテストの追加)を使用して、プログラムでマウスまたはキーボードのイベントをアプリに送信します。
  3. Instruments.appを使用してUIシーケンスを記録します。Instrumentsの録音はしっかりしていて(私はAutomatorの録音機能を使用していません)、Instrumentsの他のすべての機能も利用できます。
于 2010-01-21T18:46:21.260 に答える
-1

配列の取得についてはわかりませんが、これはマウスのクリックなどを送信するために機能するようです:

仮想入力

于 2010-01-21T18:31:27.490 に答える