AppleScript的 list 数据类型对布尔测试说明符的支持非常有限。除了按范围选择项目(使用 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
鉴于allUIElements
是 UI元素对象的引用列表,并且其中至少有一个属于文本区域?
注意我不正在寻找如何从列表中检索某种类型的所有UI元素的建议(repeat
循环会这样做) - 我想理解为什么选择器模式在这种特定情况下失败。
答案 0 :(得分: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
答案 1 :(得分:1)
从应用程序获取UI元素会产生对象说明符列表:应用程序对象(嵌套容器的一种形式),其中层次结构中的每个项目都有多个属性,包括类 - {{ 3}}可能会对此有所了解 - 虽然您的第一个示例使用了具有基类的文件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