1

AppleScript 的列表数据类型对布尔测试说明符的支持非常有限。除了按范围选择项目(使用item关键字),指定一个类也可以:

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

当列表项是引用时,使用 content关键字取消引用将起作用:

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对象的引用列表,并且其中至少有一个是类文本区域

注意我不是在寻找如何从列表中检索特定类型的所有 UI 元素的建议(repeat循环会这样做)——我想了解为什么选择器模式在这种特定情况下会失败。

4

2 回答 2

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 回答
1

从应用程序中获取 UI 元素会生成一个对象说明符列表:应用程序对象(一种嵌套容器的形式),其中层次结构中的每个项目都有多个属性,包括一个类——技术说明 TN2106可能会对此提供更多说明——而您的第一个示例使用了具有基类的文件 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 回答