1

AppleScriptのリストデータ型は、ブールテスト指定子のサポートが非常に限られています。( itemキーワードを使用して)範囲でアイテムを選択する以外に、クラスを指定すると機能します。

get every «class furl» of {1, "Test", (POSIX file "/posix/path")} --> {file ":hfs:path"} 

リストアイテムが参照である場合、contentsキーワードによる逆参照が機能します。

get every «class furl» of {1, "Test", a reference to (POSIX file "/posix/path")} --> {}
get every «class furl» of contents of {1, "Test", a reference to (POSIX file "/posix/path")} --> {file ":hfs:path"}

では、なぜ次のコードがallTextAreas空のリストに設定されるのでしょうか。

tell application "System Events"
    set allUIElements to entire contents of window 1 of someApplication 
    set allTextAreas to every text area of contents of allUIElements --> {}
end tell

それがUI要素allUIElementsオブジェクトへの参照のリストであり、それらの少なくとも1つがクラステキスト領域のものであるとすると?

リストから特定のタイプのすべてのUI要素を取得する方法の提案を探しているわけではないことに注意してください(repeatループがそれを行います)–この特定のケースでセレクターパターンが失敗する理由を理解したいと思います。

4

2 に答える 2

1

アプリケーションから UI 要素を取得すると、オブジェクト指定子のリストが生成されます。アプリケーション オブジェクト (入れ子になったコンテナーの形式) には、階層内の各項目がクラスを含むいくつかのプロパティがあります。最初の例では、基本クラスを持つファイル URL (ファイル参照の一種) を使用しました。

そのため、アプリケーションからオブジェクトを取得するときにアプリケーション フィルター参照フォームを使用するか、返されたオブジェクトの目的のプロパティをクエリする必要があります。次に例を示します。

set allButtons to {}
tell application "System Events" to tell application process "Safari"
    set allUIElements to entire contents of window 1
    repeat with anElement in allUIElements
        try
            if class of anElement is button then set end of allButtons to contents of anElement
        end try
    end repeat
end tell
allButtons
于 2012-05-18T23:39:14.250 に答える
1

Safariでフロントウィンドウのすべてのボタンを見つけたい場合は、次のようにします。このロジックを状況に適用するだけです。

tell application "System Events"
    tell process "Safari"
        set allButtons to UI elements of window 1 whose class is button
    end tell
end tell
于 2012-05-18T22:50:39.813 に答える