0 votos

Cómo recorrer los elementos de la ventana con el título dinámico

Estoy tratando de conseguir todas las filas de una tabla de la aplicación.

set ProcName to "AppName"
tell application ProcName to activate
tell application "System Events"
    tell process ProcName
        tell tab group 1 of window 1
            set items to every row of table 1 of scroll area 1
            set itemValues to {}
            repeat with aRow in items
                set itemValue to (value of text field 1 of aRow)
                log itemValue
                set the end of itemValues to itemValue
            end repeat
        end tell

    end tell
end tell

Sin embargo, cuando ejecuto el script imprime sólo varios elementos, porque el título de la ventana está cambiando constantemente y me da el siguiente error.

 "System Events got an error: Can't get window \"App name window title"

Es posible decir que la secuencia de comandos para utilizar otros identificadores distintos de título? O por favor, sugiera cómo resolver el problema.

Gracias.

1voto

Łukasz Sromek Puntos 1347

La forma más sencilla es mediante la Aplicación del identificador del paquete. Este puede ser encontrado a partir de la lectura de la Información.plist archivo dentro del paquete de la aplicación, o con algún sencillo AppleScript, tales como:

get id of application "TextEdit"

Esto devuelve com.apple.TextEdit.

Entonces, uno podría correr el siguiente AppleScript:

tell application id "com.apple.TextEdit"
    activate
end tell

Así, su revisión podría tener este aspecto (tenga en cuenta el uso de process id ya que usted está utilizando el Sistema de Eventos).

-- set bundleId to id of application "AppName"
set bundleId to "com.apple.TextEdit"

tell application id bundleId to activate
tell application "System Events"
    repeat with theProcessId in (processes whose bundle identifier is bundleId)
        tell process id (id of theProcessId)
            tell tab group 1 of window 1
                set items to every row of table 1 of scroll area 1
                set itemValues to {}
                repeat with aRow in items
                    set itemValue to (value of text field 1 of aRow)
                    log itemValue
                    set the end of itemValues to itemValue
                end repeat
            end tell
        end tell
    end repeat
end tell

0voto

wch1zpink Puntos 11

La primera cosa que yo personalmente haría sería añadir alguna delay comandos. A continuación, ejecute el código con el retraso de comandos. A veces lo que hace la diferencia.

set ProcName to "AppName"
tell application ProcName to activate

repeat until application ProcName is frontmost
    delay 0.2
end repeat
delay 0.1

tell application "System Events"
    tell process ProcName
        repeat until exists of tab group 1 of window 1
            delay 0.1
        end repeat
        tell tab group 1 of window 1
            set items to every row of table 1 of scroll area 1
            set itemValues to {}
            repeat with aRow in items
                set itemValue to (value of text field 1 of aRow)
                delay 0.1
                log itemValue
                delay 0.1
                set the end of itemValues to itemValue
            end repeat
        end tell
    end tell
end tell

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X