Se trata de un "estudio" -un intentar - para encontrar formas pragmáticas de identificar y "utilizar" los elementos de interfaz de usuario de AS:
El código siguiente funciona en principio pero debe adaptarse a cada caso individual (por ejemplo: encontrar segundo imagen ).
Yo soy no es un profesional de la informática por lo que me disculpo por una clara falta de código "en el error" - Lo siento.
ni tampoco pretende ser una "Guía completa" sobre AppleScript, sino un "Diario de viaje".
(Por cierto: AirBook, i7-3740QM, 8GB. Los bucles de repetición en "todo el contenido" pueden tardar más de 70 segundos.
Sistema: MacOS X High Sierra 10.13.6, Applescript 2.7. Los comandos pueden variar con las versiones).
Empecé mi búsqueda aquí en Pregunta diferente mis siguientes "resultados" se aplican sobre todo al hilo:
Cómo saber el nombre de los elementos de la interfaz de usuario mediante el inspector de accesibilidad (o cualquier otra herramienta)
1) Cuantos˜˜˜ nes ¿Existen elementos de la interfaz de usuario en una ventana "Ask Different"?
"Frame": tell application "System Events" to tell process "Safari"
set frontmost to true
set i to 0
Start: set listItems to (entire contents of window 1 as list)
Next: repeat with thisItem in listItems
set i to i + 1
end repeat
end tell
"Result" in
ScriptEditor: 951 -- display dialog ("UIElems:" & i)
¯¯¯¯¯
Cuántos elementos de la cadena de suministro hay en los que diferentes clases ?
Classes: if (class of item i of listItems is static text) then
set classCount to classCount +1
end if
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
"Results" in ScriptEditor:
static text (376), group˜˜ (337), UI element (166), button (51),
radio button (12), menu button (6), image (2)
(1 inst. each:) toolbar, scroll area, scroll bar, text area, text field,
tab, checkbox, splitter group, splitter
(˜˜ El "texto estático" que acaba de leer está al final de esta jerarquía "superior":
Group> WebArea> ScrollArea> Group> Group> TabGroup> SplitterGroup> Window
Varios niveles contienen 400 elementos reales: cada párrafo y viñeta es un StaticText !)
2) Cómo identificar por ejemplo, esas 2 imágenes dentro de 951 elementos de la interfaz de usuario & qué hacer:
(A partir de aquí, sólo se contabilizan las partes de código diferentes, por ejemplo, "Siguiente"; _/¯ = salto de línea).
Next: set imgNums to {}
repeat with thisItem in listItems
set i to i + 1
Then: if (class of item i of listItems is image) then
set imgNums to imgNums & i
end repeat
return imgNums _/¯ end tell
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
"Result" in
ScriptEditor: {111, 255} ( 70 sec.! Searching 951 items is tedious…)
¯¯¯¯¯¯¯¯¯¯
o simplemente "contexto" la primera ( 7 seg.!)
Next: if (class of item i of listItems is image) then exit repeat
end repeat
Then: tell thisItem to perform action "AXShowMenu" _/¯ end tell
3) Cómo llegar a AppleScript "descripción verbal" de un elemento de la interfaz de usuario?
Next: repeat with thisItem in listItems _/¯ set i to i + 1
Then: if (class of item i of listItems is image) then
return (item i of listItems as list)
exit repeat
end if _/¯ end repeat _/¯ end tell
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
"Result" for image 1 in ScriptEditor:
image 1 of group 15 of group 6 of UI element 1 of scroll area 1 ¬
of group 1 of group 1 of tab group 1 of splitter group 1 of window ¬
"applescript - How to know the name of UI elements using Accessibility ¬
inspector (or any other tool) - Ask Different" of application process ¬
"Safari" of application "System Events"
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
[Last three lines may be shortened to "window 1" – it's still in front …]
- que es esta imagen del hilo mencionado anteriormente.
4) Que atributos son posibles para un elemento, que son de hecho propiedades ?
Then: if (class of item i of listItems is image) then ¬
return (name of attributes of thisItem as list)
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
"Result" for "attributes" in ScriptEditor:
"AXFocused", "AXAccessKey", "AXTitle", "AXElementBusy", "AXPosition", ¬
"AXLinkedUIElements", "AXSelected", "AXLanguage", "AXStartTextMarker", ¬
"AXEnabled", "AXEditableAncestor", "AXHighestEditableAncestor", ¬
"AXVisited", "AXDOMIdentifier", "AXHelp", "AXURL", "AXChildren", "AXRole", ¬
"AXParent", "AXSelectedTextMarkerRange", "AXTopLevelUIElement", ¬
"AXDOMClassList", "AXSubrole", "AXDescription", "AXFocusableAncestor", ¬
"AXValue", "AXBlockQuoteLevel", "AXRoleDescription", "AXSize", "AXWindow", ¬
"AXEndTextMarker", "AXFrame"
¿Cuáles son los propiedades fácticas de la "imagen 1"?
Next: if (class of item i of listItems is image) then ¬
return (properties of thisItem as list)
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
"Result" for "properties" in ScriptEditor:
missing value, m.v, {382, 790}, image, "enter image description here", ¬
"Bild", false, "", {241, 118}, "", {}, true, m.v., "AXImage", "", m.v., ¬
false, m.v., "enter image description here"
Evidentemente, las propiedades fácticas no se corresponden directamente con los atributos (19 a 32).
Pero algunos atributos realmente puede devolver valores si se le pregunta directamente:
Then: end repeat
return value of attribute "AXFrame" of thisItem _/¯ end tell
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
"Result" for "AXFrame" in ScriptEditor: {382, 790, 623, 908}
Que la propiedad es asignado a que atributo? (Para el nombre exacto de "AX ", véase el apéndice)
... solución fácil, que se encuentra en las páginas para desarrolladores de Apple:
Next: if (class of item i of listItems is image) then
tell item i of listItems to properties
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
"Result" for "Bild" in ScriptEditor:
minimum value:missing value, orientation:m. v., position:{382, 790}, ¬
class:image, accessibility description:"enter image description here", ¬
role description:"Bild", focused:false, title:"", size:{241, 118}, ¬
help:"", entire contents:{}, enabled:true, maximum value:m. v., ¬
role:"AXImage", value:"", subrole:m. v., selected:false, name:m. v., ¬
description:"enter image description here"
Bueno, aparentemente el propio comando simple de Apple "propiedades" también devuelve términos que son realmente de nivel superior, como " clase :imagen" un " contenido completo :{}".
Si está interesado en saber qué propiedades están asignadas a qué atributos reales, pruebe la "solución del apéndice" (por ejemplo, > "AXFrame:{382, 790, 623, 908}").
- Que "acciones" pertenecen a un elemento ( AXPress, AXShowMenu ) ?
Me DuckDuckGo[ogle]'d (DD'went?) y encontré una lista de "AXActionConstants" en el sitio de Apple :
"AXShowMenu" "AXPress" "AXCancel" "AXConfirm"
"AXDecrement" "AXIncrement" "AXShowAlternateUI" "AXShowDefaultUI"
"AXPick" Elegir un UIElement, como elemento de menú
"AXRaise" Hacer que una ventana sea lo más frontal posible
"AXZoomWindow" Amplía una ventana a las "dimensiones del escritorio" pero NO a "pantalla completa" .
¡NUEVO! acción encontrada "AXZoomWindow" a través de UIElementInspector°° © Apple Inc. 2010
.
- ¿Cómo son elementos del menú ¿se dirige mejor?
(Pronto añadiré mi opinión/conclusiones sobre estas cuestiones restantes).
- Cómo "diferente" son clases -y elementos de la interfaz de usuario- en varias aplicaciones ?
-
"TextEdit" es un ejemplo para las "funciones" minimalistas de una ventana de aplicación. (Tenga en cuenta que
sus herramientas Windows (fuentes, etc.) tienen elementos de interfaz propios, muchos más que la aplicación principal)
-
Su "barra" superior consta de 3 botones de colores, una imagen que representa el documento, su título como texto estático y una pequeña flecha hacia abajo, un botón de menú.
-
Aparte de estos hay (potencialmente) 2 áreas de desplazamiento (derecha y inferior) con barras de desplazamiento, también indicadores de valor (su tamaño), y por último, y no menos importante, su "contenido", un área de texto.
Classes of window 1 of TextEdit / Finder / iTunes:
set classNum to classNum & (class of item i of listItems)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
"Result" for "TextEdit" (16):
button (7), scroll bar (2), scroll area, text area, value indicator,
menu button, image, static text
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
"Result" for "Finder" window in list view with left area with
"devices" etc. , 11 files (208):
UI element (49), static text (49), image (27), row (26), button (19),
text field (12), group (6), radio button (4), column (4), ...
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
"Result" for "iTunes" (26):
button (12), radio button (3), static text (3), pop up button (2),
radio group (2), slider, value indicator, scroll area, text field
-
"Finder" en la vista de lista muestra iconos y herramientas (= imágenes), los archivos tienen nombres, fecha, etc. (texto estático), las herramientas son también botones, los nombres de los archivos son también campos de texto (renombrar).
-
"iTunes" (sin elementos de TV "instalados") tiene 2 botones emergentes (1: música, películas, TV / 2: siguiente, historial, texto de la canción) además de varios tipos de botones de navegación.
-
Pero todas estas aplicaciones tienen también cientos de elementos de menú: menús, submenús, subsubmenús (TextEdit 350, Finder 430).
A P E N D I E N T E
Código más antiguo para llegar a las "asignaciones" - pero devuelve ¡el nombre exacto! ... QUE tomó algunos pruebas:*
Next: if (class of item i of listItems is image) then
repeat with name in (attributes of thisItem as list)
try
if value of name is "Bild" then exit repeat
end try
end repeat _/¯ exit repeat _/¯ end if
try
i & k & item k of (name of attributes of thisItem as list)
end try
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
"Result" for "Bild" in ScriptEditor: {111, 28, "AXRoleDescription"}
(Incl.: # of UI element, # of attribute, name of attribute)
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
({382, 790} => AXPosition, {241, 118} => AXSize, "AXImage" => AXRole …)
El bloque try es necesario, ya que algunos atributos sin valor, de lo contrario, provocan errores.
Esta búsqueda en la página de muestra tomó 9s. (#111) en Esta página 135s. ¡(#767) !
0 votos
Desde apple.stackexchange.com/help/on-topic : "Si tiene una pregunta sobre un problema práctico que intenta resolver...". La pregunta anterior tiene su mérito, pero es demasiado amplia para poder responderla fácilmente. Una manera de salir de esto que puedo imaginar es centrarse en "cómo puedo encontrar elementos de la interfaz de usuario", pero esto ya está cubierto en otro Q & A (por lo que la pregunta aquí podría ser reescrito para preguntar cómo se puede resolver sin utilizando el Inspector de Accesibilidad). Para temas más detallados sería mejor preguntar por los elementos de una aplicación específica en el contexto de un problema del mundo real en preguntas separadas.
1 votos
En el pasado teníamos un blog de AD que hubiera sido perfecto para este tipo de post, pero por diversas razones se ha cerrado hace tiempo. Si alguien cree que este tipo de posts de preguntas y respuestas debería ser posible, por favor, cree una solicitud/pregunta en el sitio Meta para discutirlo.
0 votos
@ nohillside: muchas gracias por tu prudente edición (también a mi respuesta). Espero que el tema sea aceptado ahora, así que añadiré respuestas cortas a mis cuestiones restantes más abajo.